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 itemnext_url = response.xpath("//a[@id='amore']/@href").get()print("@"*100)print(next_url)if not next_url:returnelse: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 规定好主域名,下面的所有子域名都可爬取,不过子域名要和项目的开始域名完全一致。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
