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
包含需要添加的网址,如product/{}/.format(m[i])
反复。
我该怎么做呢。我应该为每个Url创建新的蜘蛛调用,还是应该为蜘蛛编写一些代码来自动迭代列表。如果答案是后者,我会写什么?
我知道有很多与此相关的答案,例如this但我有一个固定且已知的网址列表。
答案 0 :(得分:2)
如果您事先知道网址,只需填充start_urls
即可。如果你说m
是一个产品列表(这是我从你所写的内容中假设的那样),那么它将如下所示:
start_urls = ['https://practise.com/product/{}/'.format(product) for product in m]
答案 1 :(得分: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)