使用从列表中获取的Urls来使用Scrapy进行刮擦

时间:2017-07-31 09:14:57

标签: python scrapy scrapy-spider

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但我有一个固定且已知的网址列表。

2 个答案:

答案 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)