2017-07-31 82 views
0
class PractiseSpider(scrapy.Spider): 
    name = "practise" 
    allowed_domains = ["practise.com"] 
    start_urls = ['https://practise.com/product/{}/'] 
    def parse(self, response): 
     #do something 
     #scrape with next url in the list 

我的目录m采取的url包含需要像product/{}/.format(m[i]) 反复添加的URL。 我该怎么做。我应该为每个Url创建新的蜘蛛调用,还是应该为蜘蛛编写一些代码来自动迭代列表。如果答案是后者,我该写什么?刮使用Scrapy使用从列表

我知道有很多与此相关的答案,例如, this但我有一个固定的和已知的网址列表。

回答

1

如果您事先知道网址,只需填写start_urls即可。如果你说m是产品列表(这就是我想从你写的),那么就应该是这样的:

start_urls = ['https://practise.com/product/{}/'.format(product) for product in m] 
+0

OK,然后怎么办遍历start_urls – twitu

+0

名单@twitu您不需要,Scrapy会为您处理它 - 它会从'start_urls'中抓取所有网址,并用响应调用您的'parse'方法。 –

2

或者压倒一切start_urls,您可以覆盖你的蜘蛛start_requests()方法。这种方法会产生从蜘蛛开始的请求。

默认情况下,您的蜘蛛做到这一点:

def start_requests(self): 
    for url in self.start_urls: 
     yield Request(url, dont_filter=True) 

,所以你可以在你的蜘蛛修改这个方法来任何你想:

def start_requests(self): 
    ids = pop_ids_from_db() 
    for id in ids: 
     url = f'http://example.com/product/{id}' 
     yield Request(url, dont_filter=True)