2012-02-17 19 views
20

我正在爬取一個網站,其中可能包含許多start_urls,如http://www.a.com/list_1_2_3.htm如何在抓取中動態生成start_urls?

我要填充如[list_ \ d + \ d + \ d +的.htm], start_urls和爬行過程中從像URL [node_ \ d +的.htm]提取的項目。

我可以使用CrawlSpider來實現這個功能嗎? 如何在抓取中生成start_urls dynamiclly?

非常感謝!

+2

HTTP://計算器.com/q/8798235/ – warvariuc 2012-02-17 05:48:52

+0

關於start_requests的更多信息http://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Spider。 start_requests – briankip 2016-04-05 15:51:05

回答

12

有兩個問題:

1)是的,你可以通過使用規則如實現這一功能,

rules =(Rule(SgmlLinkExtractor(allow = ('node_\d+.htm')) ,callback = 'parse')) 

suggested reading

2)是的,你可以動態地生成start_urls,start_urls是

list

>>> start_urls = ['http://www.a.com/%d_%d_%d' %(n,n+1,n+2) for n in range(0, 26)]例如

>>> start_urls 

['http://www.a.com/0_1_2', 'http://www.a.com/1_2_3', 'http://www.a.com/2_3_4', 'http://www.a.com/3_4_5', 'http://www.a.com/4_5_6', 'http://www.a.com/5_6_7', 'http://www.a.com/6_7_8', 'http://www.a.com/7_8_9', 'http://www.a.com/8_9_10','http://www.a.com/9_10_11', 'http://www.a.com/10_11_12', 'http://www.a.com/11_12_13', 'http://www.a.com/12_13_14', 'http://www.a.com/13_14_15', 'http://www.a.com/14_15_16', 'http://www.a.com/15_16_17', 'http://www.a.com/16_17_18', 'http://www.a.com/17_18_19', 'http://www.a.com/18_19_20', 'http://www.a.com/19_20_21', 'http://www.a.com/20_21_22', 'http://www.a.com/21_22_23', 'http://www.a.com/22_23_24', 'http://www.a.com/23_24_25', 'http://www.a.com/24_25_26', 'http://www.a.com/25_26_27'] 
+0

感謝您的回答。但是我想在抓取過程中生成start_urls:當我遇到像http://www.a.com/%d_%d_%d這樣的網址時,我將它添加到start_urls中。我不能首先確認start_urls的範圍...... – user1215269 2012-02-17 09:54:45

+0

至於我所知道的,scrapy add start_urls如果您在抓取過程中在start_urls列表中添加了任何不會執行的url,那麼在開始抓取時請求調度程序。 – 2012-02-17 10:55:44

38

動態生成的URL的最好方法是重寫蜘蛛 'start_requests' 方法:

from scrapy.http.request import Request 

def start_requests(self): 
     with open('urls.txt, 'rb') as urls: 
      for url in urls: 
       yield Request(url, self.parse)