因朋友推薦,最近又重新上手了scrapy拧粪,和上一次(一年前)用確實有不同的感受了橱野。上次感覺scrapy中的東西完全是一個黑盒朽缴,用起來很不順手。這次重點看了它的整個架構(gòu)圖水援,搞懂了它的數(shù)據(jù)流向茅郎。然后花了兩天把它的整個文檔都仔細讀了一遍,現(xiàn)在用起來感覺十分好用或渤。這次簡單說說使用scrapy進行調(diào)試的一些小技巧系冗。
1.使用scrapy.shell.inspect_response
。
當運行scrapy spiders
薪鹦,代碼走到inspect_response()
的時候掌敬,會直接起一個終端,非常方便的是池磁,這個終端中包含了運行之前所有的變量涝开,如response
,這對于調(diào)試來講十分有用框仔。
2.在終端使用scrapy shell
舀武。
有的時候,我們并不想立即編寫代碼离斩,二是希望直接使用scrapy
提供的shell來做一些開發(fā)和調(diào)試工作银舱。下面是我想分享的幾個點:
- 如何在終端自定義請求的各個參數(shù)?比如我想抓取
https://rookiefly.cn
這個網(wǎng)站跛梗,并且使用偽裝的headers. 我們知道寻馏,在 scrapy 項目中,只需要在下載中間件中做一次處理就夠了核偿,那么在scrapy shell中呢诚欠?可以使用如下的方式自定義 scrapy request
from scrapy.http import Request
req = Request('https://rookiefly.cn')
req.headers.setdefault('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')
# 或者像下面這樣
req = Request('https://rookielfy.cn', headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'})
fetch(req)
其實主要方法就是根據(jù)help(Request)
來看看Request
初始化可以傳入什么參數(shù),根據(jù)dir(Request)
來看看scrapy.http.Request
的實例有些啥屬性漾岳。
- 如何通過
html
text來生成scrapy.http.Response
轰绵?這一點最開始也挺令我疑惑的。因為有的時候我需要將requests
請求得到的response content 扔到 scrapy shell 中用scrapy的api去解析和調(diào)試尼荆,如果能生成Response左腔,那么還可以通過view(response)
這個功能來檢查返回頁面的結(jié)果。這個不能直接使用scrapy.http.Response
來初始化實例捅儒,需要這樣
resp = requests.get('https://rookielfy.cn')
from scrapy.http import HtmlResponse
response = HtmlResponse(url='https://rookielfy.cn', body=resp.content)
這樣就初始化了一個最簡單的response
了液样。
- 如何讓
scrapy shell
讀入spiders
的配置文件settings.py
?有這個疑問是因為有的時候巧还,項目有眾多中間件鞭莽,而我想直接用scrapy shell進行調(diào)試。比如scrapy-splash麸祷,在終端有如下代碼
req = SplashRequest('https://httpbin.org/user-agent',
args={
'wait': 2,
},
splash_url='http://127.0.0.1:8050',
headers={'User-Agent': 'i am a fake user agent'}
)
fetch(req)
如果不引用splash的中間件澎怒,那么直接在終端執(zhí)行fetch(req)
,請求不會通過splash的摇锋,所以在啟動終端的時候丹拯,載入指定的配置就很重要站超。那么如何做呢?其實比較簡單乖酬,我們只需要在項目根目錄(含有scrapy.cfg
文件)下啟動scrapy shell
即可死相。
以上就是近期使用scrapy shell
總結(jié)出來的小技巧。現(xiàn)在發(fā)現(xiàn)scrapy這套爬蟲框架的生態(tài)非常豐富咬像,還有很多可以挖掘的東西算撮。學(xué)海無涯,以后再做總結(jié)和分享县昂。