2023年12月9日發(作者:ebao)

(一)Scrapy的命令行
最近一直都是在用自己寫的抓取框架做爬蟲,還是系統的整理一下Scrapy相關的知識,做一個old school 的爬蟲。
爬蟲的整個流程,就是發送網絡請求,處理返回的內容兩個過程。然后我們將這個流程細化;如何準備需要訪問的鏈接,需要訪問的鏈接應
該是哪些鏈接;發送請求時我們帶上什么,如何更快的發送更多請求;對返回的內容需要做哪些操作……
啟動部分:
從我記憶里Scrapy的啟動方式一步步來看,首先看scrapy的命令行是怎么運行起來的。和兩個文件。
從commands文件夾中導入,commands文件夾下的就是常見的各種命令,描述著當我們在命令行下調用這些命令時會發生
什么。文件里是所以命令的基類ScrapyCommand。而這一些都是通過中來執行的,當我們最開始下載完Scrapy后在命
令行輸入scrapy時。
我們可以從命令行里看到上面的結果,而這一切都是在中進行操作的。當運行時,會調用execute方法。
(1)當不帶參數或帶上了錯誤參數
execute方法最開始會獲取最近的項目配置并加載,因為我此前并不在某個項目下,所以輸出no active project。(圖中inproject是一個
bool值,在中尋找文件,如果不存在則往上一級查找,查看現在是否在某個項目下。)
cmds是對commands文件夾下的各個命令進行加載,cmdname是對當前參數中的命令進行驗證。
當不帶任何參數的時候,調用_print_commands方法。方法里的代碼是不是似曾相識,就是我們直接在命令行輸入scrapy顯示的內容。
def _print_commands(ttings, inproject):
_print_header(ttings, inproject)
print("Usage:")
print(" scrapy
print("Available commands:")
cmds = _get_commands_dict(ttings, inproject)
for cmdname, cmdclass in sorted(()):
print(" %-13s %s" % (cmdname, _desc()))
if not inproject:
print()
print(" [ more ] More commands available when run from project directory")
print()
print('U "scrapy
(2)當帶上正確參數
cmds中已經獲取cmd對象,根據傳入的參數獲取對應的cmd對象。注意的是兩個_run_print_help方法;第一個是執行cmd的
process_options方法,對cmd對象的tting進行一些初始化的設置(如log文件位置,等級的一些設置);設置好之后給cmd設置
crawler_process對象。第二個是_run_command方法,通過傳入的cmd執行對應的run方法。
本文發布于:2023-12-09 21:18:19,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/1702127899241122.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:(一)Scrapy的命令行.doc
本文 PDF 下載地址:(一)Scrapy的命令行.pdf
| 留言與評論(共有 0 條評論) |