Windows 10家庭中文版,Python 3.6.4,Scrapy 1.5.0,
在Scrapy中,建立爬蟲程序或項目的方式有兩種(在孤讀過Scrapy的大部分文檔后):
1.繼承官方Spider類(5個)
2.命令行工具scrapy genspider(4個)
方式一:繼承官方Spider類
下圖是官網的示例:繼承了scrapy.Spider
這里的scrapy.Spider是在scrapy包的__init__.py中導入的,實際上來自於scrapy.spiders.Spiders:
除了Spider類以外,scrapy內部還有幾個Generic Spiders類:
-class scrapy.spiders.CrawlSpider
-class scrapy.spiders.XMLFeedSpider
-class scrapy.spiders.CSVFeedSpider
-class scrapy.spiders.SitemapSpider
上面的幾個Spider類都可以被繼承以實現自己的爬蟲程序(目前自己不是很熟悉,僅在前面測試過SitemapSpider,但其官網SitemapSpider的示例沒有name屬性,故需要添加后才可以運行)。
更多資料:Scrapy官方Spiders文檔
方式二:命令行工具scrapy genspider
還可以使用scrapy genspider命令建立爬蟲程序。
在官文Command line tool介紹中,genspider是一個global命令,這意味着可以使用genspider在 Scrapy項目內 或 外 都可以建立爬蟲程序。
下面幾個配置項需要注意:
-scrapy genspider -h
genspider的幫助信息(下圖展示了部分Usage信息)。
-scrapy genspider -l
顯示可以使用的爬蟲模板,就是 新建爬蟲程序可以繼承哪個內部爬蟲類。這里存在一個疑問,沒有SitemapSpider的模板。
-scrapy genspider -t TEMPLATE ...
使用TEMPLATE對應的內部爬蟲類建立爬蟲程序(下圖分別用四種模板建立了四個爬蟲程序,其實,basic是默認的,可以不用寫)。
打開其中的www.techmeme.com的爬蟲程序看看:使用模板xmlfeed建立,繼承了XMLFeedSpider。
但這里存在問題:www.techmeme.com(一個很有名的科技資訊網站)的主頁是HTTPS的,而這里的start_urls顯示的是HTTP!
前面看資料說在DNS服務器還是什么地方可以配置自動跳轉到HTTPS版本。 可是, 這里是否需要更改為HTTPS呢?孤認為是需要的!做 試驗 驗證會更好哦!)
注意,上面是使用genspider命令在項目外建立爬蟲程序,而要在項目內建立爬蟲程序時,需要選擇Scrapy項目中的spiders目錄,否則,無法自動檢測到(按理說是這樣,總不能在項目下的任何位置建立吧,項目要有項目的規矩)。
總結
從建立爬蟲程序的效率來看,使用命令行的方式快速很多,但不能創建SitemapSpider類;
上面講的都是 繼承Scrapy內部的爬蟲類, 那么,是否可以 繼承自定義的爬蟲類 呢?按理說是可以的,實際上也應該可以,需要驗證;
無論哪種方式,都需要后續更多的coding工作,因此,在繼續之前,請熟悉Scrapy的爬蟲的工作機制,見官文Spiders;
如果還有更多的方式,或者,讀者自己研發的方式,歡迎告知,會很感激;
當然,使用其它命令行工具也可以建立一些看不見的爬蟲程序,就不是本文所涉及的了,需要更理解Scrapy才可以。
0704-0951 Update
關於www.techmeme.com的爬蟲程序,使用runspider進行了測試:
-默認的HTTP時會發生 重定向(302)
-更改為HTTPS后則不會 發生 重定向
也可以使用scrapy parse命令進行測試,但是,首先要將上面的myspider2放到某個Scrapy項目的spiders目錄下:
scrapy parse --spider=myspider2 -d 3 "https://www.techmeme.com"