在使用scrapy的过程中,由于需要动态爬取网页,因此在循环中加入如下代码,随后出现下述报错
代码如下:
yield scrapy.Request(site, callback = self.parse_other_web, dont_filter=True)
报错如下:
pthon版本为:* Python3.7.4和python3.8.3
scrapy版本为: Scrapy 2.2.1
以下代码可以重现此问题(请整段复制后运行)
import ast
import inspect
from textwrap import dedent
class Bob:
def doit(self):
"""
this line is flush left
"""
if True:
yield 1234
if __name__ == '__main__':
b = Bob()
c = b.doit
if inspect.isgeneratorfunction(c):
tree = ast.parse(dedent(inspect.getsource(c)))
解决办法
其实出现这个问题和yield是否在循环中并没有关系,而是因为yield为文件中的缩进要求较高,因此只需将文件中所有单独成行的注释全部去除即可。
以下链接为查找原文
https://github.com/scrapy/scrapy/issues/4477
https://github.com/rugantio/fbcrawl/issues/62
https://www.reddit.com/r/scrapy/comments/gt0cn0/setting_start_urls_to_a_set_list/?sort=top