[英]Using recursion Spider in Scrapy [Python]
简介您好,我正在使用Scrapy以便在Yahoo Answer中获取数据。 我的成就是将所有问题和答案都放在一个精确的部分中。
我首先尝试使用Scrapy和Selenium,然后尝试在一个小节中列出任何问题,该列表是在Spider类中记住的。 之后,我使用For循环来解析每个页面。
for url in self.start_urls_mod:
yield scrapy.Request(url, callback=self.parse_page)
i = i + 1
parse_page方法的结构用于抓取问题页面,最佳答案和所有其他答案。 这很好。
问题是当我尝试使用HREF去“下一步”问题中的“下一个”链接出现在页面的右侧下面的链接。 我再次调用相同的函数parse_page,传递来自该链接的网址。 有时这项工作可行,但其他时候则没有。 我现在不知道两次调用parse_page函数是否正确,而在其他情况下不使用任何基本情况来停止递归,无论如何都要停止它。
该程序工作没有任何错误并停止了,但是我在“下一个”部分中找不到任何问题。 只有一个
我的代码有一段。
def parse_page(self, response):
#Scraping with xpath things that interests me
#Go to the next similar question
next_page = hxs.xpath('((//a[contains(@class,"Clr-b")])[3])/@href').extract()
composed_string = "https://answers.yahoo.com" + next_page[0]
print("NEXT -> "+str(composed_string))
yield scrapy.Request(urljoin(response.url, composed_string), callback=self.parse_page)
ps。 我会用皱巴巴的蜘蛛,但我无法定义任何规则来仅接受此类问题。 所以请我如何改善我的功能。
信息: https ://answers.yahoo.com/question/index ? qid = 20151008101821AAuHgCk
首先,您用于选择下一个URL的XPath是错误的。 您将始终获得带有“ Clr-b”的第三个URL,这可能是错误的(它不存在或不是下一个站点)。
对于此类查询,我将使用文本搜索。 在您的情况下,如下所示:
next_page = response.xpath('//a[contains(@class,"Clr-b") and text()=" Next "]/@href').extract()
然后,您可以按自己的方式urljoin
URL,而不必使用urljoin
。 这不是必要的,因为你已经有了,你需要正确的URL yield
为你做。 这可能是您的Spider停止的原因:您生成了一个带有urljoin
的URL,该URL找不到-这不是您打印到控制台的URL。
并且使用与回调相同的功能也没有问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.