1.scrapy基本了解
Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫(xiě)的應(yīng)用框架。可以應(yīng)用在包括數(shù)據(jù)挖掘, 信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。其最初是為了頁(yè)面抓取(更確切來(lái)說(shuō),網(wǎng)絡(luò)抓取)所設(shè)計(jì)的,也可以應(yīng)用在獲取API所返回的數(shù)據(jù)(比如Web Services)或者通用的網(wǎng)絡(luò)爬蟲(chóng)。
Scrapy也能幫你實(shí)現(xiàn)高階的爬蟲(chóng)框架,比如爬取時(shí)的網(wǎng)站認(rèn)證、內(nèi)容的分析處理、重復(fù)抓取、分布式爬取等等很復(fù)雜的事。
Scrapy主要包括了以下組件:
Scrapy運(yùn)行流程大概如下:
1.首先,引擎從調(diào)度器中取出一個(gè)鏈接(URL)用于接下來(lái)的抓取
2.引擎把URL封裝成一個(gè)請(qǐng)求(Request)傳給下載器,下載器把資源下載下來(lái),并封裝成應(yīng)答包(Response)
3.然后,爬蟲(chóng)解析Response
4.若是解析出實(shí)體(Item),則交給實(shí)體管道進(jìn)行進(jìn)一步的處理。
5.若是解析出的是鏈接(URL),則把URL交給Scheduler等待抓取
2.安裝scrapy
虛擬環(huán)境安裝:
sudo pip install virtualenv #安裝虛擬環(huán)境工具
virtualenv ENV #創(chuàng)建一個(gè)虛擬環(huán)境目錄
source ./ENV/bin/active #激活虛擬環(huán)境
pip install Scrapy #驗(yàn)證是否安裝成功
pip list #驗(yàn)證安裝
可以如下測(cè)試:
scrapy bench
3.使用scrapy
在抓取之前, 你需要新建一個(gè)Scrapy工程. 進(jìn)入一個(gè)你想用來(lái)保存代碼的目錄,然后執(zhí)行:
$ scrapy startproject tutorial
這個(gè)命令會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)新目錄 tutorial, 它的結(jié)構(gòu)如下:
|____scrapy.cfg|____tutorial| |______init__.py| |______init__.pyc| |____items.py| |____items.pyc| |____pipelines.py| |____settings.py| |____settings.pyc| |____spiders| | |______init__.py| | |______init__.pyc| | |____example.py| | |____example.pyc
這些文件主要是:
scrapy.cfg: 項(xiàng)目配置文件
tutorial/: 項(xiàng)目python模塊, 之后您將在此加入代碼
tutorial/items.py: 項(xiàng)目items文件
tutorial/pipelines.py: 項(xiàng)目管道文件
tutorial/settings.py: 項(xiàng)目配置文件
tutorial/spiders: 放置spider的目錄
3.1. 定義Item
items是將要裝載抓取的數(shù)據(jù)的容器,它工作方式像 python 里面的字典,但它提供更多的保護(hù),比如對(duì)未定義的字段填充以防止拼寫(xiě)錯(cuò)誤通過(guò)創(chuàng)建scrapy.Item類(lèi), 并且定義類(lèi)型為 scrapy.Field 的類(lèi)屬性來(lái)聲明一個(gè)Item.我們通過(guò)將需要的item模型化。在 tutorial 目錄下的 items.py 文件中編輯。
3.2. 編寫(xiě)Spider
Spider 是用戶(hù)編寫(xiě)的類(lèi), 用于從一個(gè)域(或域組)中抓取信息, 定義了用于下載的URL的初步列表, 如何跟蹤鏈接,以及如何來(lái)解析這些網(wǎng)頁(yè)的內(nèi)容用于提取items。
要建立一個(gè) Spider,繼承 scrapy.Spider 基類(lèi),并確定三個(gè)主要的、強(qiáng)制的屬性:
name:爬蟲(chóng)的識(shí)別名,它必須是唯一的,在不同的爬蟲(chóng)中你必須定義不同的名字.
start_urls:包含了Spider在啟動(dòng)時(shí)進(jìn)行爬取的url列表。因此,第一個(gè)被獲取到的頁(yè)面將是其中之一。后續(xù)的URL則從初始的URL獲取到的數(shù)據(jù)中提取。我們可以利用正則表達(dá)式定義和過(guò)濾需要進(jìn)行跟進(jìn)的鏈接。
parse():是spider的一個(gè)方法。被調(diào)用時(shí),每個(gè)初始URL完成下載后生成的 Response 對(duì)象將會(huì)作為唯一的參數(shù)傳遞給該函數(shù)。該方法負(fù)責(zé)解析返回的數(shù)據(jù)(response data),提取數(shù)據(jù)(生成item)以及生成需要進(jìn)一步處理的URL的 Request 對(duì)象。
這個(gè)方法負(fù)責(zé)解析返回的數(shù)據(jù)、匹配抓取的數(shù)據(jù)(解析為 item )并跟蹤更多的 URL。
在 /tutorial/tutorial/spiders 目錄下創(chuàng)建
example.py
3.3 .爬取
到項(xiàng)目根目錄, 然后運(yùn)行命令
$ scrapy crawl example
完整代碼參考:https://github.com/AlexanLee/Spider 其中有題目中抓取京東和豆瓣的方法。
新聞熱點(diǎn)
疑難解答
圖片精選