Scrapy:創建爬蟲程序的方式


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"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM