首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scrapy在parse_dir_contents回调中未跟踪链接

Scrapy在parse_dir_contents回调中未跟踪链接
EN

Stack Overflow用户
提问于 2016-04-10 17:34:39
回答 1查看 93关注 0票数 0

我很难让我的蜘蛛跟踪链接。我已经看过Scrapy教程很多次了,也搜索了很多,但我仍然很困惑。

由于某些原因,即使有数百个结果分布在大约15-20页上,我的爬虫总是返回5-7个结果,并说它已经完成了。

我在调用parse_dir_contents方法之前和开始运行时都放置了一些打印语句。由于某种原因,它被调用了40次(分成两组,每组20次),并且只运行了5-7次。我每页大约有20个结果,如果我打印出它每次导航到的URL,它永远不会超过第一页。

我确信在这段代码中有很多我可以做得更好的事情。任何帮助都将不胜感激。我真的一直在努力工作,让这件事成为现实。

这里有相当多的“助手”代码,这真的把事情搞得一团糟。我很抱歉,但我想给你我用来获得最佳解决方案的确切代码。

在每个页面上都有许多"vip“列表,每个页面都有重复的内容。所以我只想把它们刮掉一次,而不是把它们纳入numPages计算中。

EN

回答 1

Stack Overflow用户

发布于 2016-04-10 21:02:56

这真的很难指出问题,因为我不能用您提供的代码重现错误。我不知道你的代码到底出了什么问题,但我可以给你一些改进代码的建议:

代码语言:javascript
运行
复制
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()它就可以了

代码语言:javascript
运行
复制
for regularListingContainer in body.xpath('//div[@class="search-item regular-ad"]'):
        link = regularListingContainer.xpath('a[contains(@class, "title")]/@href').extract_first()

在大多数情况下,处理链接时最好使用urljoin(),让scrapy来处理繁重的工作,并处理相对路径或绝对路径

代码语言:javascript
运行
复制
link = regularListingContainer.xpath('a[contains(@class, "title")]/@href').extract_first()
yield Request(urljoin(link), callback=self.parse_dir_contents)

Scrapy使用多线程,这意味着每当你产生任何东西时,它都会打开一个线程,并使它彼此异步运行。这意味着您无法控制先执行哪些代码的流程。我最好的选择是,你的全局变量不会改变你的想法。

要解决这个问题,您可以使用meta[]标记在线程之间交换信息,例如

代码语言:javascript
运行
复制
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

这将输出

代码语言:javascript
运行
复制
I'm going on a journy

希望我能帮上忙,欢迎进一步询问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36528100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档