Scrapy少写yield坑

当你重写start_requests方法的时候,使用scrapy.Request(xxx)后记得前面一定要加上yield,不然报错说是NoneType不是一个可迭代对象

1.报错信息:

Traceback (most recent call last):
  File "E:\apps\anaconda3\lib\site-packages\twisted\internet\defer.py", line 1418, in _inlineCallbacks
    result = g.send(result)
  File "E:\apps\anaconda3\lib\site-packages\scrapy\crawler.py", line 87, in crawl
    start_requests = iter(self.spider.start_requests())
TypeError: 'NoneType' object is not iterable
2020-02-27 14:20:59 [twisted] CRITICAL: 
Traceback (most recent call last):
  File "E:\apps\anaconda3\lib\site-packages\twisted\internet\defer.py", line 1418, in _inlineCallbacks
    result = g.send(result)
  File "E:\apps\anaconda3\lib\site-packages\scrapy\crawler.py", line 87, in crawl
    start_requests = iter(self.spider.start_requests())
TypeError: 'NoneType' object is not iterable

2.正确使用:

# start_urls = ['http://xxx/xxx/']

base_url = "http://xxx/xxx/{}?page={}"
key_worlds = [xxx, xxx, xxx]

def start_requests(self):
    for k in self.key_worlds:
        yield scrapy.Request(
            url=self.base_url.format(k, 1),
            meta={"key": k},
            callback=self.parse,
        )

3.错误使用:

# start_urls = ['http://xxx/xxx/']

base_url = "http://xxx/xxx/{}?page={}"
key_worlds = [xxx, xxx, xxx]

def start_requests(self):
    for k in self.key_worlds:
        scrapy.Request(
            url=self.base_url.format(k, 1),
            meta={"key": k},
            callback=self.parse,
        )

鄙人粗心大意,就一个yield之差,排查了十几二十分钟。。。。

数学老师常教我们等效替换
  • 在这里我们也可以。可以使用列表推导式来代替这个;

  • 反正都是建立一系列的初始化请求,然后放到队列里面自动去请求,然后执行调用指定的回调函数,没有指定的话,默认是回调self.parse函数,下面来等价的将上面的代码换一下:

描述:如果你细心的话,你可以注意到我刚刚前面给的代码,有注释一行# start_urls = ['http://xxx/xxx/']

刚刚上面的代码可以使用下面的代码来替换,是不是很简单???

(PS:但是有一点不一样的就是,meta信息没有传递过去,但这里你可以通过url那个关键词来获取,也是可以滴)

base_url = "http://xxx/xxx/{}?page={}"
key_worlds = [xxx, xxx, xxx]

start_urls = [base_url.format(k, 1) for k in key_worlds]
至此本文踩坑记录写完了,希望能够帮助到各位在爬虫路上的小伙伴们,觉得不错点个赞呗
感谢认真读完这篇教程的您

先别走呗,这里有可能有你需要的文章:

CSS字体反爬实战,10分钟就能学会
爬虫:js逆向目前遇到的知识点集合;
woff字体反爬实战,10分钟就能学会;
爬虫js解密分析:某某猫小说;
爬虫js解密分析:某某云文学;
个人总结-js逆向解析思路;
woff字体反爬实战,10分钟就能学会(ttf字体同理);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值