scrapy 如何根据给定条件发送报废请求

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

如果URL包含分页,我想发送一个Scrapy请求到URL,否则我想返回上一个请求的上一个响应。我尝试在下面的代码中实现它,但我没有得到想要的结果。
因此,例如,具有和不具有分页的URL看起来像这样。

  1. https://www.oddsportal.com/soccer/africa/africa-cup-of-nations/results/
  2. https://www.oddsportal.com/soccer/africa/africa-cup-of-nations-2021/results/
    我向第二个URL发送了一个请求,因为它包含分页,而对于第一个URL,我只想返回前面的响应。
    我在process_link函数中实现了该逻辑,但我发现我只从get_content函数中的第二个链接获得响应。
def parse_item(self, response):
        yield scrapy.Request(url=response.url, callback=self.process_link,  
        meta ={
                'splash': {

                    'args' : {'wait': 0.5},
                     'endpoint' : 'render.html', 
                }       

            },
            dont_filter=True)    

    def process_link(self, response):

        next_page = response.xpath("//*[@id='pagination']/a[last()-1]//@href").extract_first()

        if next_page is not None:
            print('Check if next page is paginated------------------------------------',response.url)
            yield scrapy.Request(url= response.url, callback=self.get_content,meta = {
                'splash': {

                    'args' : {'wait': 5, 'lua_source': self.script},
                     'endpoint' : 'execute', 

                } },
                        dont_filter=True
                        )

        else:
            return response
            #     # yield SplashRequest(url=response.url, callback=self.get_content, endpoint='execute', args={'wait': 1, 'lua_source': self.script,'timeout':90, 'images': 0, 'resource_timeout': 10}, dont_filter=True)

    def get_content(self, response):
        #Get the url for both request in parse_link function
        print('000000000000000000000000000000', response.url)
tzxcd3kk

tzxcd3kk1#

对于第二种情况,您需要调用get_content

else:
        yield self.get_content(response)
    ######### instead of #######
    # else:
    #     return response

相关问题