废纸确定重定向并停止循环



我正在尝试在某些页面上迭代。网站的不同页面标记为OR10,OR20,OR30等。即。

/Restaurant_Review

是第一页

/Restaurant_Review-or10

是第二页

/Restaurant_Review-or20

第三页等。

问题在于,如果不存在-or版本,我将从这些站点重定向到普通URL(第一)。我目前正在循环循环循环,并动态更改 -或值。

 def parse(self,response):
     l = range(100)
     reviewRange = l[10::10]
     for x in reviewRange:
          yield((url+"-or"+str(x)), callback=self.parse_page)
def parse_page(self,response):
    #do something
    #How can I from here tell the for loop to stop
    if(oldurl == response.url):
         return break
     #this doesnt work

问题在于,即使页面不存在,我也需要执行请求,这是不可扩展的。我尝试过比较URL,但仍然不明白我如何从parse_page()函数返回某些可以告诉parse()函数停止的东西。

您可以检查response.meta.get('redirect_urls')中的内容。如果您在那里有东西,请用dont_filter重试原始URL。或尝试使用重新构造件捕获此类案例。

这不是对实际问题的答案,而是不需要重定向检测的替代解决方案。

在HTML中,您已经可以通过以下方式找到所有这些分页URL

response.css('.pageNum::attr(href)').getall()

关于 @Anton的问题,有关我如何获得的评论:

您可以通过带有零工外壳的随机餐厅评论页面来检查此问题:

scrapy shell "https://www.tripadvisor.co.za/Restaurant_Review-g32655-d348825-Reviews-Brent_s_Delicatessen_Restaurant-Los_Angeles_California.html"

在外壳内部,您可以在浏览器中查看接收到的HTML:

view(response)

在那里您会看到它包含了分页链接的HTML(和特定类)。真实的网站确实使用JavaScript渲染下一页,但是通过根据URL检索下一页的完整 html来做到这一点。基本词,它只是替换了整个页面,涉及的其他处理很少。因此,这意味着,如果您自己打开链接,您也会获得完整的HTML。因此,JavaScript问题在这里是无关紧要的。

最新更新