当你重写start_requests
方法的时候,使用scrapy.Request(xxx)
后记得前面一定要加上yield
,不然报错说是NoneType
不是一个可迭代对象
1.报错信息:1
2
3
4
5
6
7
8
9
10
11
12
13Traceback (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.正确使用:1
2
3
4
5
6
7
8
9
10
11
12# 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.错误使用:1
2
3
4
5
6
7
8
9
10
11
12# 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那个关键词来获取,也是可以滴)1
2
3
4base_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字体同理);