繁体   English   中英

在Scrapy中使用递归蜘蛛[Python]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM