我正在使用scrapy runspider命令在相同的域中抓取大约10,000个具有相同结构的链接。随机地在一些页面之间(大约40%到50%的页面)爬行,但不抓取,因为在我的parse方法中,我计算页面中的特定元素,并根据该元素抓取页面的其他元素。但由于某种原因(稍后将详细介绍此原因),对于某些urls,该元素的计算结果不正确。为了解决这个问题,我想要为这些urls重复调用我的解析方法,最多5次,直到它正确地计算(希望在5次运行中,页面将正确地响应条件,否则我假设该元素确实被评估为错误)。如何对此进行编码(下面的部分代码)?
出现上述现象的可能原因:我的网页链接类型是www.example.com/search_term/,它实际上是在www.example.com中输入"search_term“后动态生成的页面。所以我的猜测是,在某些情况下,Scrapy甚至在页面www.example.com/search_term/完全生成之前就得到了响应。也许理想的解决方案是使用webdriver之类的,但所有这些在现阶段对我来说都太复杂了。只要我有95%的成绩,我就很高兴。
下面的相关代码(在不遗漏任何细节的情况下进行可读性清理):
class mySpider(scrapy.Spider):
name = "spidername"
def start_requests(self):
urls = [url1, ... url10000]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse,headers={
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"})
def parse(self, response):
if (value of particular_item in page == 10):
yield {'someitem':
response.xpath('/html/body/div').extract())}
else:
<<Once again call this parse fuction with the same url upto a maximum of 5 times - Need help in writing the code here>>发布于 2016-10-19 15:02:01
您的XPath要求您正在解析的HTML的body的第一个元素是div:
<html>
<body>
<div>...你确定每个网站都是这样的吗?如果没有任何关于你想要刮什么的信息,我就不能给你更多的建议。
或者,您可以尝试另一种解决方案,从网站提取所有div:
for div in response.xpath('//div').extract():
yield {'div': div}https://stackoverflow.com/questions/40115225
复制相似问题