[英]Scrapy not following links on parse_dir_contents callback
我无法让我的蜘蛛追踪链接。 我浏览了Scrapy教程很多次,并进行了很多搜索,但仍然感到困惑。
出于某种原因,即使在约15-20页上分布了数百个结果,我的蜘蛛也总是返回5-7个结果并说完成了。
我在parse_dir_contents方法被调用之前以及开始运行时都放置了一些打印语句。 由于某种原因,它被称为40次(分为两组,每组20次),并且仅运行5至7次。 每页大约有20个结果,如果我每次打印出要导航的URL,它就永远不会超过第1页。
我敢肯定,在这段代码中我可以做很多事情。 任何帮助将不胜感激。 我真的一直在努力使这项工作。
这里有很多“帮助程序”代码,它们确实使事情变得混乱。 抱歉,但我想为您提供用于获得最佳解决方案的确切代码。
每个页面上有许多“ vip”清单,每个清单都重复。 所以我只想刮擦一次,而不将它们作为numPages计算的因素。
很难指出问题所在,因为我无法使用您提供的代码重现该错误。 我不知道您的代码到底出了什么问题,但是我可以为您提供一些改进代码的提示:
for regularListingContainer in body.xpath('//div[@class="search-item regular-ad"]'):
link = str(regularListingContainer.re('href="(.*)" class="title">'))
您可以多次调用xpath或css选择器,在进行抓取时,坚持使用scrapy库更快,您可以执行body.xpath().xpath().css()
来获取只extract()
的字符串
for regularListingContainer in body.xpath('//div[@class="search-item regular-ad"]'):
link = regularListingContainer.xpath('a[contains(@class, "title")]/@href').extract_first()
大多数时候处理链接时,最好执行urljoin()
,让scrapy做繁重的工作并处理相对路径或绝对路径
link = regularListingContainer.xpath('a[contains(@class, "title")]/@href').extract_first()
yield Request(urljoin(link), callback=self.parse_dir_contents)
Scrapy使用多线程技术,这意味着每当您产生任何东西时,它都会打开一个线程并使其彼此异步运行。 这意味着您无法控制首先执行哪个代码的流程。 最好的选择是全局变量不会改变您的想法。
为了解决这个问题,您可以使用meta[]
标签在线程之间交换信息,例如
link = regularListingContainer.xpath('a[contains(@class, "title")]/@href').extract_first()
request=Request(urljoin(link), callback=self.anotherFunc)
request['string']="I'm going on a journy"
yield request
def anotherFunc(self, response)
foo=response['string']
print foo
这将输出
I'm going on a journy
希望我有所帮助,随时询问
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.