scrapy調試小技巧

因朋友推薦,最近又重新上手了scrapy,和上一次(一年前)用確實有不同的感受了。上次感覺scrapy中的東西完全是一個黑盒,用起來很不順手。這次重點看了它的整個架構圖,搞懂了它的數(shù)據(jù)流向。然后花了兩天把它的整個文檔都仔細讀了一遍,現(xiàn)在用起來感覺十分好用。這次簡單說說使用scrapy進行調試的一些小技巧。

1.使用scrapy.shell.inspect_response 。

當運行scrapy spiders,代碼走到inspect_response()的時候,會直接起一個終端,非常方便的是,這個終端中包含了運行之前所有的變量,如response,這對于調試來講十分有用。

2.在終端使用scrapy shell。

有的時候,我們并不想立即編寫代碼,二是希望直接使用scrapy提供的shell來做一些開發(fā)和調試工作。下面是我想分享的幾個點:

  1. 如何在終端自定義請求的各個參數(shù)?比如我想抓取 https://rookiefly.cn這個網站,并且使用偽裝的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的實例有些啥屬性。

  1. 如何通過htmltext來生成scrapy.http.Response?這一點最開始也挺令我疑惑的。因為有的時候我需要將 requests請求得到的response content 扔到 scrapy shell 中用scrapy的api去解析和調試,如果能生成Response,那么還可以通過view(response)這個功能來檢查返回頁面的結果。這個不能直接使用scrapy.http.Response來初始化實例,需要這樣
resp = requests.get('https://rookielfy.cn')
from scrapy.http import HtmlResponse
response = HtmlResponse(url='https://rookielfy.cn',  body=resp.content)

這樣就初始化了一個最簡單的response了。

  1. 如何讓scrapy shell讀入spiders的配置文件 settings.py?有這個疑問是因為有的時候,項目有眾多中間件,而我想直接用scrapy shell進行調試。比如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總結出來的小技巧?,F(xiàn)在發(fā)現(xiàn)scrapy這套爬蟲框架的生態(tài)非常豐富,還有很多可以挖掘的東西。學海無涯,以后再做總結和分享。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容