我正在尝试遍历某些页面。网站的不同页面都标有or10,or20,or30等。即
/Restaurant_Review
是第一页
/Restaurant_Review-or10
是第二页
/Restaurant_Review-or20
第三页等
问题是,如果-or-版本不存在,我将从那些站点重定向到普通URL(第一个)。我目前正在for循环中遍历一个范围,并动态更改-or-值。
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()函数停止。
答案 0 :(得分:1)
例如,您可以检查response.meta.get('redirect_urls')
中的内容。如果那里有东西,请用dont_filter
重试原始URL。
或者尝试使用RetryMiddleware来捕获此类情况。
答案 1 :(得分:1)
这不是对实际问题的答案,而是一种不需要重定向检测的替代解决方案。
在HTML中,您已经可以通过使用以下命令找到所有这些分页URL:
response.css('.pageNum::attr(href)').getall()
关于@Anton的问题,有关我如何获得它的评论:
您可以通过使用Scrapy Shell打开随机的餐厅评论页面来进行检查:
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检索下一页的 full HTML来实现的。 Basicallty,它只是替换整个页面,几乎没有涉及其他处理。因此,这意味着如果您自己打开链接,您也会获得完整的HTML。因此,此处的Javascript问题无关紧要。