接上篇Scrapy學習(一) 安裝,安裝後,咱們利用一個簡單的例子來熟悉如何使用Scrapy建立一個爬蟲項目。css
在已配置好的環境下輸入python
scrapy startproject dmozgit
系統將在當前目錄生成一個myproject的項目文件。該文件的目錄結構以下github
dmoz/ # 項目根目錄 scrapy.cfg # 項目配置文件 dmoz/ # 項目模塊 __init__.py items.py # 項目item文件,有點相似Django中的模型 pipelines.py # 項目pipelines文件,負責數據的操做和存儲 settings.py # 項目的設置文件. spiders/ # 項目spider目錄,編寫的爬蟲腳步都放此目錄下 __init__.py
接下來咱們以dmoz.org
爲爬取目標。開始變現簡單的爬蟲項目。正則表達式
在items.py中編寫咱們所需的數據的模型json
from scrapy.item import Item, Field class Website(Item): name = Field() description = Field() url = Field()
這個模型用來填充咱們爬取的數據app
在spiders文件下新建爬蟲文件。這部分纔是業務的核心部分。
首先建立一個繼承scrapy.spiders.Spider
的類
而且定義以下三個屬性dom
name 標識spiderscrapy
start_urls 啓動爬蟲時進行爬取的url列表,默認爲空ide
parse() 每一個初始的url下載後的response都會傳到該方法內,在這個方法裏能夠對數據進行處理。
from scrapy.spiders import Spider from scrapy.selector import Selector from dirbot.items import Website class DmozSpider(Spider): name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/", ] def parse(self, response): sites = response.css('#site-list-content > div.site-item > div.title-and-desc') items = [] for site in sites: item = Website() item['name'] = site.css( 'a > div.site-title::text').extract_first().strip() item['url'] = site.xpath( 'a/@href').extract_first().strip() item['description'] = site.css( 'div.site-descr::text').extract_first().strip() items.append(item) return items
其中值得注意的是,在parse
方法內,咱們能夠用Selector選擇器來提取網站中咱們所需的數據。提取的方式有幾種。
xpath() 傳入xpath表達式獲取節點值
css() 傳入css表達式獲取節點值
re() 傳入正則表達式獲取節點值 # 此方法本人未測試
接下來咱們運行爬蟲,並將爬取的數據存儲到json中
scrapy crawl dmoz -o items.json
在運行爬蟲的過程當中,我遇到了以下報錯:
KeyError: 'Spider not found: dmoz
這個是由於個人spider類中設置的name的值和我scrapy crawl
運行的spider不一致致使的。
具體代碼詳見:
scrapy入門項目