我是靠谱客的博主 优秀白云,最近开发中收集的这篇文章主要介绍Scrapy 框架里爬取多页数据 yield 卡住的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1@ 前言

漫长的寒假必须找点事情来做,刚好换了系统,准备将笔记全部从石墨腾到印象。在复习 scrapy 框架的时候, 遇到了一个问题,就是在爬取多个页面的换页时候,要进行 yield 操作来进行下一个页面的爬取,但是爬取完第一页后,老是卡在那里,也不报错,就是单纯的卡,也花费了一些时间解决,故在此记录下。

2@ 过程

首先上我出问题的代码段:

class PoemSpider(scrapy.Spider):
name = 'poem'
allowed_domains = ['gushiwen.org']
start_urls = ['https://www.gushiwen.org/default_1.aspx']
base_url = "https://gushiwen.org"
# 更多的 response 的方法,可以跟进查看 py 源码
def parse(self, response):
......
for x in range(10):
print("@"*100)
print(titles[x])
item["title"] =
titles[x]
item["author"] = authors[x]
item["dynasty"] =
dynasties[x]
item["contents"] = contents[x]
encoder.encode(item)
yield item
next_url = response.xpath("//a[@id='amore']/@href").get()
print("@"*100)
print(next_url)
if not next_url:
return
else:
print("test2")
yield scrapy.Request(url=self.base_url+next_url, callback=self.parse,dont_filter=True)

由于未报错,我加入两行打印代码来定位问题的位置:

在这里插入图片描述
可以看到,代码是进行到了 else 分支的,那么大概率就是 Request 方法出了问题。网上搜了很久,没有搜到匹配的问题,修改了 timeout 的值还是于事无补,所以就从头开始看代码,注意到三个变量:

  • allowed_domains
  • start_urls
  • base_url

分别表示的是允许的域名,开始 url,基底 url , 其中第三个变量是为了拼接后面的 url 我自己定义的,他们三个的格式不一样:

allowed_dmains 是初始化爬虫项目的时候自己指定的,我将 base_url 的域名格式完全与 satrt_urls 调整一致,就可已顺利爬取后面页面了。

在这里插入图片描述

3@ 结论

这里 allowed_domains 规定好主域名,下面的所有子域名都可爬取,不过子域名要和项目的开始域名完全一致。

最后

以上就是优秀白云为你收集整理的Scrapy 框架里爬取多页数据 yield 卡住的问题的全部内容,希望文章能够帮你解决Scrapy 框架里爬取多页数据 yield 卡住的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部