python中spider的用法_Python爬虫从入门到放弃(十五)之 Scrapy框架中Spiders用法
Spider類定義了如何爬去某個網(wǎng)站,包括爬取的動作以及如何從網(wǎng)頁內(nèi)容中提取結(jié)構(gòu)化的數(shù)據(jù),總的來說spider就是定義爬取的動作以及分析某個網(wǎng)頁
工作流程分析
1、 以初始的URL初始化Request,并設(shè)置回調(diào)函數(shù),當(dāng)該request下載完畢并返回時,將生成response,并作為參數(shù)傳給回調(diào)函數(shù). spider中初始的requesst是通過start_requests()來獲取的。start_requests()獲取 start_urls中的URL,并以parse以回調(diào)函數(shù)生成Request
2、 在回調(diào)函數(shù)內(nèi)分析返回的網(wǎng)頁內(nèi)容,可以返回Item對象,或者Dict,或者Request,以及是一個包含三者的可迭代的容器,返回的Request對象之后會經(jīng)過Scrapy處理,下載相應(yīng)的內(nèi)容,并調(diào)用設(shè)置的callback函數(shù)
3、 在回調(diào)函數(shù)內(nèi),可以通過lxml,bs4,xpath,css等方法獲取我們想要的內(nèi)容生成item
4、 最后將item傳遞給Pipeline處理
我們以通過簡單的分析源碼來理解
我通常在寫spiders下寫爬蟲的時候,我們并沒有寫start_requests來處理start_urls中的url,這是因為我們在繼承的scrapy.Spider中已經(jīng)寫過了,我們可以點(diǎn)開scrapy.Spider查看分析
通過上述代碼我們可以看到在父類里這里實(shí)現(xiàn)了start_requests方法,通過make_requests_from_url做了Request請求
如下圖所示的一個例子,parse回調(diào)函數(shù)中的response就是父類列start_requests方法調(diào)用make_requests_from_url返回的結(jié)果,并且在parse回調(diào)函數(shù)中我們可以繼續(xù)返回Request,如下屬代碼中yield Request()并設(shè)置回調(diào)函數(shù)。
spider內(nèi)的一些常用屬性
我們所有自己寫的爬蟲都是繼承與spider.Spider這個類
name
定義爬蟲名字,我們通過命令啟動的時候用的就是這個名字,這個名字必須是唯一的
allowed_domains
包含了spider允許爬取的域名列表。當(dāng)offsiteMiddleware啟用時,域名不在列表中URL不會被訪問
所以在爬蟲文件中,每次生成Request請求時都會進(jìn)行和這里的域名進(jìn)行判斷
start_urls
起始的url列表
這里會通過spider.Spider方法中會調(diào)用start_request循環(huán)請求這個列表中每個地址。
custom_settings
自定義配置,可以覆蓋settings的配置,主要用于當(dāng)我們對爬蟲有特定需求設(shè)置的時候
設(shè)置的是以字典的方式設(shè)置:custom_settings = {}
from_crawler
這是一個類方法,我們定義這樣一個類方法,可以通過crawler.settings.get()這種方式獲取settings配置文件中的信息,同時這個也可以在pipeline中使用
start_requests()
這個方法必須返回一個可迭代對象,該對象包含了spider用于爬取的第一個Request請求
這個方法是在被繼承的父類中spider.Spider中寫的,默認(rèn)是通過get請求,如果我們需要修改最開始的這個請求,可以重寫這個方法,如我們想通過post請求
make_requests_from_url(url)
這個也是在父類中start_requests調(diào)用的,當(dāng)然這個方法我們也可以重寫
parse(response)
這個其實(shí)默認(rèn)的回調(diào)函數(shù)
負(fù)責(zé)處理response并返回處理的數(shù)據(jù)以及跟進(jìn)的url
該方法以及其他的Request回調(diào)函數(shù)必須返回一個包含Request或Item的可迭代對象
總結(jié)
以上是生活随笔為你收集整理的python中spider的用法_Python爬虫从入门到放弃(十五)之 Scrapy框架中Spiders用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven 实战 (许晓斌)
- 下一篇: CCF-CSP真题《202209-4—吉