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