scrapy 当只有一个开始url时,我如何在Scrappy中实现并发?

xyhw6mcr  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(150)

我有一个情况,我需要发送20个请求每秒到web服务器与scrapy.我有一个产品列表页面的URL,我传递给蜘蛛在开始到self.start_urls,有这么多的产品URL,我从该列表页面,我需要刮,但它发送请求到所有这些产品URL顺序.我如何才能使它并发?

蜘蛛代码逻辑

class WebSpider(scrapy.Spider):

    def __init__(self, country=None, category=None, *args,**kwargs):
        self.start_urls.append(url[country][category])

    def start_requests(self):
        for url in self.start_urls:
            request = Request(
                url=url,
                headers=self.default_headers,
                callback=self.parse, 
                cookies=self.cookies,
                cb_kwargs=dict(link= url, asin= self.asin),
            )
            yield request

    def parse(self, response,**kwargs):
        products = response.xpath('//link')
        for product in products:
            yield Request(
                url=url,
                headers=self.default_headers,
                callback=self.product_parse, 
                cookies=self.cookies,
                cb_kwargs=dict(link= url, asin= self.asin),
            )

    def product_parse(self, response,**kwargs):
        # get all product details
        yield item
kxkpmulp

kxkpmulp1#

如下面的代码所示,您可以在本地为这个特定的spider在自定义设置中添加CONCURRENT_REQUESTS,以启用并发请求。spider可以定义自己的设置,这些设置将优先于并覆盖项目的设置。要阅读更多Setting per Spider,请参阅

class WebSpider(scrapy.Spider):
    name= 'webspider'

    custom_settings = {
     'CONCURRENT_REQUESTS' = 32
     }

    def __init__(self, country=None, category=None, *args,**kwargs):
        self.start_urls.append(url[country][category])

    def start_requests(self):
        for url in self.start_urls:
            request = Request(
                url=url,
                headers=self.default_headers,
                callback=self.parse, 
                cookies=self.cookies,
                cb_kwargs=dict(link= url, asin= self.asin),
            )
            yield request

您可以使用许多其他设定来取代CONCURRENT_REQUESTS,或与CONCURRENT_REQUESTS一起使用。
CONCURRENT_REQUESTS_PER_IP-设置每个IP地址的并发请求数。
CONCURRENT_REQUESTS_PER_DOMAIN-定义每个域允许的并发请求数。
MAX_CONCURRENT_REQUESTS_PER_DOMAIN-设定网域允许的并行请求数目上限。

相关问题