我试着反复浏览一些页面。网站的不同页面标有or10、or20、or30等。i、 e
/Restaurant_Review
是第一页吗
/Restaurant_Review-or10
是第二页吗
/Restaurant_Review-or20
第3页等
问题是,如果-or-version不存在,我会从这些站点重定向到正常的url(第一个)。我目前正在for循环中的一个范围内循环,并动态更改-or-value。你知道吗
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\u page()函数返回告诉parse()函数停止的内容。你知道吗
这不是对实际问题的回答,而是不需要重定向检测的替代解决方案。你知道吗
在HTML中,您可以使用以下方法找到所有分页URL:
关于@Anton在评论中提出的问题,关于我是如何做到这一点的:
你可以通过打开一个随机的餐厅评论页面来检查这一点:
scrapy shell "https://www.tripadvisor.co.za/Restaurant_Review-g32655-d348825-Reviews-Brent_s_Delicatessen_Restaurant-Los_Angeles_California.html"
在shell中,您可以使用以下工具在浏览器中查看收到的HTML:
view(response)
在这里,您将看到它包含用于分页链接的HTML(和那个特定的类)。真正的网站确实使用Javascript来呈现下一页,但它是通过基于URL检索下一页的完整HTML来实现的。基本上,它只是取代了整个页面,很少涉及额外的处理。所以这意味着如果你自己打开链接,你也会得到完整的HTML。因此,Javascript问题与此无关。你知道吗
例如,您可以检查
response.meta.get('redirect_urls')
中的内容。如果您在那里有什么,请用dont_filter
重试原始url。 或者试着用RetryMiddleware抓住这样的案子。你知道吗相关问题 更多 >
编程相关推荐