一日一技:如何正確在 PyCharm 中調(diào)試 Scrapy 爬蟲?
最近有不少同學在粉絲群里面問,如何調(diào)試Scrapy 爬蟲。有些人不知道如何讓 Scrapy 爬蟲進入調(diào)試模式;還有一些人不知道怎么單步調(diào)試。
怎么進入調(diào)試模式
我們知道,Scrapy 項目要啟動爬蟲的時候,需要在終端或者 CMD 中執(zhí)行一段命令scrapy crawl 爬蟲名。但是,PyCharm 的調(diào)試模式需要以某個.py文件作為入口來運行。
為了解決這個問題,我們可以在 Scrapy 項目的根目錄創(chuàng)建一個 main.py文件,然后在里面寫下如下一段代碼:
- from scrapy.cmdline import execute
- execute('scrapy crawl 爬蟲名'.split())
然后,以這個文件作為入口文件,在這個文件上右鍵,選擇Debug 'main',就可以正確啟動 PyCharm 的調(diào)試模式并在第一個斷點上停下來了。如下圖所示:
如何正確單步調(diào)試
單步調(diào)試大家都會,不就是下圖中畫紅框的這兩個按鈕嘛:
左邊是逐行調(diào)試,遇到函數(shù)直接跳過,右邊是遇到函數(shù)進入
但問題是,在 Scrapy 項目里面,如果你的代碼運行到了yield scrapy.Request這種使用yield拋出請求對象的語句,只要再按一下單步調(diào)試的按鈕,你就會發(fā)現(xiàn) PyCharm 跳轉到了一個陌生的地方,如下圖所示:
又或者,你的代碼發(fā)送了很多次請求,回調(diào)函數(shù)都到self.parse里面,現(xiàn)在你已經(jīng)看完第一條請求返回的數(shù)據(jù)了,斷點停在了第28行,如下圖所示:
現(xiàn)在你想看第二次請求的返回數(shù)據(jù),于是你點了一下單步調(diào)試,于是你又來到了一個陌生的地方:
這個地方就像一個泥潭,無論你怎么跳出都跳不出來,始終無法回到你自己的代碼中。你越是往外跳,PyCharm 就會打開越多的陌生文件,如下圖所示:
遇到這種情況怎么辦呢?實際上非常簡單,你注意觀察在調(diào)試面板上,還有一個按鈕,如下圖箭頭所指:
這個按鈕的功能,是讓 PyCharm 運行的代碼,運行到你當前鼠標光標所在的位置再停下來。所以,例如現(xiàn)在上面圖中的代碼停在了第17行,我想馬上運行到第28行怎么辦?鼠標首先在第28行點一下,如下圖所示箭頭指向的輸入光標:
然后按下這個運行到光標的按鈕,就會發(fā)現(xiàn)代碼已經(jīng)運行到了這一行(是到了這一行,還沒有運行這一行)。接下來你再按一下單步調(diào)試按鈕,就能看到 info 變量的值了。看了第一次請求的返回值以后,你想看第二次請求的返回值怎么辦呢?也很好辦,你再一次用鼠標點一下第27行或者第28行,接下來再次點擊運行到當前光標的按鈕,于是第二次請求的結果立刻就出現(xiàn)在了你的面前:
本文轉載自微信公眾號「未聞Code」,可以通過以下二維碼關注。轉載本文請聯(lián)系未聞Code公眾號。