簡體   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