Scrapy爬蟲入門教程一 Scrapy爬蟲入門教程二 Scrapy爬蟲入門教程三 開發環境: Python 3.6.0 版本 (當前最新) Scrapy 1.3.2 版本 (當前最新)
命令行工具配置設置Scrapy項目的默認結構使用scrapy工具創建項目控制項目常用的工具命令startPRojectgenspidercrawlchecklisteditfetchviewshellparsesettingsrunspiderversionbench自定義項目命令
Scrapy是通過scrapy命令行工具來控制的,當前最新版本0.10
Scrapy將scrapy.cfg在標準位置的ini樣式文件中查找配置參數:
系統默認配置:/etc/scrapy.cfg或c:/scrapy/scrapy.cfg
全局配置文件:~/.config/scrapy.cfg($XDG_CONFIG_HOME)和~/.scrapy.cfg($HOME)用于
項目配置文件:scrapy.cfg 在scrapy項目的根目錄中。
來自這些文件的設置將按照所列的優先順序進行合并:用戶定義的值比系統級默認值具有更高的優先級,項目范圍的設置將在定義時覆蓋所有其他設置。
Scrapy也理解,并且可以通過配置一些環境變量。目前這些是:
SCRAPY_SETTINGS_MODULE(請參閱指定設置) SCRAPY_PROJECT SCRAPY_PYTHON_SHELL(見Scrapy shell)
在深入了解命令行工具及其子命令之前,讓我們先了解Scrapy項目的目錄結構。
雖然可以修改,但所有Scrapy項目默認情況下具有相同的文件結構,類似于:
scrapy.cfgmyproject/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py spider1.py spider2.py ...其中,目錄scrapy.cfg文件位于項目的根目錄。該文件包含定義項目設置的python模塊的名稱。這里是一個例子:
[settings]default = myproject.settings您可以從運行沒有參數的Scrapy工具開始,它將打印一些使用幫助和可用的命令: 直接在項目根目錄的命令行輸入: scrapy
會得到如下提示:Scrapy 1.3.2 - no active projectUsage: scrapy <command> [options] [args]Available commands: bench Run quick benchmark test commands fetch Fetch a URL using the Scrapy downloader genspider Generate new spider using pre-defined templates runspider Run a self-contained spider (without creating a project) settings Get settings values shell Interactive scraping console startproject Create new project version Print Scrapy version view Open URL in browser, as seen by Scrapy [ more ] More commands available when run from project directoryUse "scrapy <command> -h" to see more info about a command你通常用這個scrapy工具做的第一件事是創建你的Scrapy項目: scrapy startproject myproject [ project_dir ]
這將在該project_dir目錄下創建一個Scrapy項目。如果project_dir沒有指定,project_dir將會和myproject名稱一樣。
接下來,進入新的項目目錄: cd project_dir
您可以使用scrapy命令從那里管理和控制您的項目。
您可以使用scrapy項目內部的工具來控制和管理它們。
大家不要著急一下子把所以東西都介紹到,具體細節后面都會寫到。
例如,要創建一個新的爬蟲: scrapy genspider mydomain mydomain.com
通過上述命令創建了一個spider name為CnblogsHomeSpider的爬蟲,start_urls為http://www.cnblogs.com/的爬蟲。
一些Scrapy命令(如crawl)必須從Scrapy項目內部運行。請參閱命令參考下文中的哪些命令必須從內部項目運行的詳細信息。
還要記住,一些命令在從項目中運行時可能有稍微不同的行為。例如,user_agent如果正在獲取的URL與某個特定的爬蟲相關聯,fetch命令將使用爬蟲覆蓋的行為(例如屬性覆蓋用戶代理)。這是有意的,因為該fetch命令用于檢查爬蟲程序如何下載頁面。
此部分包含可用內置命令的列表,其中包含描述和一些用法示例。記住,您可以隨時通過運行以下命令獲得有關每個命令的更多信息:
scrapy <command> -h
你可以看到所有可用的命令: scrapy -h
上面兩種命令,它們只能在Scrapy項目內部工作,也可以全局命令的情況下工作(但它們可能會被項目內的配置覆蓋)。
全局命令:
startprojectgenspidersettingsrunspidershellfetchviewversion僅項目命令:
crawlchecklisteditparsebench語法: scrapy startproject <project_name> [project_dir]
在目錄project_name下創建一個名為的Scrapy項目project_dir 。如果project_dir沒有指定,project_dir將會和myproject名稱一樣。
用法示例: $ scrapy startproject myproject
語法: scrapy genspider [-t template] <name> <domain>
在當前文件夾或當前項目的spiders文件夾中創建一個新的爬蟲,如果從項目中調用。該參數設置為爬蟲的name,而用于生成allowed_domains和start_urls爬蟲的屬性。
用法示例:
$ scrapy genspider -lAvailable templates: basic crawl csvfeed xmlfeed$ scrapy genspider example example.comCreated spider 'example' using template 'basic'$ scrapy genspider -t crawl scrapyorg scrapy.orgCreated spider 'scrapyorg' using template 'crawl'這只是一個方便的快捷命令,用于創建基于預定義模板的爬蟲,但當然不是唯一的方式來創建爬蟲。您可以自己創建爬蟲源代碼文件,而不是使用此命令。
語法: scrapy crawl <spider>
使用爬蟲開始爬行。
用法示例:
$ scrapy crawl myspider[ ... myspider starts crawling ... ]語法: scrapy check [-l] <spider>
用法示例:
$ scrapy check -lfirst_spider * parse * parse_itemsecond_spider * parse * parse_item$ scrapy check[FAILED] first_spider:parse_item>>> 'RetailPricex' field is missing[FAILED] first_spider:parse>>> Returned 92 requests, expected 0..4語法: scrapy list
列出當前項目中的所有可用爬蟲。每行輸出一個爬蟲。
用法示例:
$ scrapy列表spider1spider2語法: scrapy edit <spider>
此命令僅作為最常見情況的方便快捷方式提供,開發人員當然可以選擇任何工具或IDE來編寫和調試他的爬蟲。
用法示例:
$ scrapy edit spider1
語法: scrapy fetch <url>
使用Scrapy下載器下載給定的URL,并將內容寫入標準輸出。
這個命令的有趣的事情是它獲取爬蟲下載它的頁面。例如,如果爬蟲有一個USER_AGENT 屬性覆蓋用戶代理,它將使用那個。
所以這個命令可以用來“看”你的爬蟲如何獲取一個頁面。
如果在項目外部使用,將不應用特定的每個爬蟲行為,它將只使用默認的Scrapy下載器設置。
支持的選項:
–spider=SPIDER:繞過爬蟲自動檢測和強制使用特定的爬蟲 –headers:打印響應的HTTP頭,而不是響應的正文 –no-redirect:不遵循HTTP 3xx重定向(默認是遵循它們)
用法示例:
$ scrapy fetch --nolog http://www.example.com/some/page.html[ ... html content here ... ]$ scrapy fetch --nolog --headers http://www.example.com/{'Accept-Ranges': ['bytes'], 'Age': ['1263 '], 'Connection': ['close '], 'Content-Length': ['596'], 'Content-Type': ['text/html; charset=UTF-8'], 'Date': ['Wed, 18 Aug 2010 23:59:46 GMT'], 'Etag': ['"573c1-254-48c9c87349680"'], 'Last-Modified': ['Fri, 30 Jul 2010 15:30:18 GMT'], 'Server': ['Apache/2.2.3 (CentOS)']}語法: scrapy view <url>
在瀏覽器中打開給定的URL,因為您的Scrapy爬蟲會“看到”它。有時,爬蟲會看到與普通用戶不同的網頁,因此可以用來檢查爬蟲“看到了什么”并確認它是您期望的。
支持的選項:
–spider=SPIDER:繞過爬蟲自動檢測和強制使用特定的爬蟲 –no-redirect:不遵循HTTP 3xx重定向(默認是遵循它們) 用法示例:
$ scrapy view http://www.example.com/some/page.html[ ... browser starts ... ]語法: scrapy shell [url] 啟動給定URL(如果給定)的Scrapy shell,如果沒有給出URL,則為空。還支持UNIX樣式的本地文件路徑,相對于 ./或../前綴或絕對文件路徑。有關詳細信息,請參閱Scrapy shell。
支持的選項:
–spider=SPIDER:繞過爬蟲自動檢測和強制使用特定的爬蟲 -c code:評估shell中的代碼,打印結果并退出 –no-redirect:不遵循HTTP 3xx重定向(默認是遵循它們); 這只影響你可以在命令行上作為參數傳遞的URL; 一旦你在shell中,fetch(url)默認情況下仍然會遵循HTTP重定向。 用法示例:
$ scrapy shell http://www.example.com/some/page.html[ ... scrapy shell starts ... ]$ scrapy shell --nolog http://www.example.com/ -c '(response.status, response.url)'(200, 'http://www.example.com/')# shell follows HTTP redirects by default$ scrapy shell --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)'(200, 'http://example.com/')# you can disable this with --no-redirect# (only for the URL passed as command line argument)$ scrapy shell --no-redirect --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)'(302, 'http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F')語法: scrapy parse <url> [options]
獲取給定的URL并使用處理它的爬蟲解析它,使用通過–callback選項傳遞的方法,或者parse如果沒有給出。
支持的選項:
–spider=SPIDER:繞過爬蟲自動檢測和強制使用特定的爬蟲 –a NAME=VALUE:set spider argument(可以重復) –callback或者-c:spider方法用作回調來解析響應 –pipelines:通過管道處理項目 –rules或者-r:使用CrawlSpider 規則來發現用于解析響應的回調(即,spider方法) –noitems:不顯示已抓取的項目 –nolinks:不顯示提取的鏈接 –nocolour:避免使用pygments來著色輸出 –depth或-d:請求應遞歸跟蹤的深度級別(默認值:1) –verbose或-v:顯示每個深度級別的信息 用法示例:
$ scrapy parse http://www.example.com/ -c parse_item[ ... scrapy log lines crawling example.com spider ... ]>>> STATUS DEPTH LEVEL 1 <<<# Scraped Items ------------------------------------------------------------[{'name': u'Example item', 'category': u'Furniture', 'length': u'12 cm'}]# Requests -----------------------------------------------------------------[]語法: scrapy settings [options]
獲取Scrapy設置的值。
如果在項目中使用,它將顯示項目設置值,否則將顯示該設置的默認Scrapy值。
用法示例:
$ scrapy settings --get BOT_NAMEscrapybot$ scrapy settings --get DOWNLOAD_DELAY0語法: scrapy runspider <spider_file.py>
運行一個自包含在Python文件中的爬蟲,而不必創建一個項目。
用法示例:
$ scrapy runspider myspider.py[...爬蟲開始爬行...]語法: scrapy version [-v]
打印Scrapy版本。如果使用-v它也打印Python,Twisted和平臺信息,這是有用的錯誤報告。
新版本0.17。 語法: scrapy bench
運行快速基準測試。基準
您還可以使用COMMANDS_MODULE設置添加自定義項目命令 。有關如何實現命令的示例,請參閱scrapy/commands中的Scrapy命令。
新聞熱點
疑難解答