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 规定好主域名,下面的所有子域名都可爬取,不过子域名要和项目的开始域名完全一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值