Scrapy 启动时可能会因为代码中出现语法错误而报错,其中最常见的错误就是 invalid syntax 错误。下面是解决这个问题的攻略:
1. 确认错误原因
首先需要看一看报错信息,确认是“invalid syntax”错误,然后需要看具体哪个文件、哪一行代码出错了,如下面的示例:
File "/Users/jason/Documents/PythonProjects/scrapy_proj/spiders/test_spider.py", line 17
allowed_domains = ['www.example.com']
^
SyntaxError: invalid syntax
可以看到,这里报错信息中指出了错误的文件和行数。
2.检查代码语法错误
在已知了文件和行数之后,需要检查这一行代码的语法是否正确。在上面的示例中,错误是因为缺失了左括号,修改正确之后代码如下:
allowed_domains = ['www.example.com']
3. 重启Scrapy
修改错误之后,需要重新启动 Scrapy 以应用修改。重新打开命令行,进入 Scrapy 项目的根目录,并执行如下命令:
scrapy crawl spider_name
其中 spider_name 是你的爬虫的名称。
示例1
比如,在我的 scrapy 项目中,我新建了一个 spider 文件:example_spider.py
,并编写了以下代码:
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
allowed_domains = ['www.example.com']
def start_requests(self):
urls = ['http://www.example.com']
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
pass
执行 scrapy crawl example
命令时,会报出如下错误:
File "/Users/jason/Documents/PythonProjects/scrapy_proj/spiders/example_spider.py", line 4
allowed_domains = ['www.example.com']
^
SyntaxError: invalid syntax
可以看到报错信息中指出了错误在 example_spider.py
文件的第4行。经过检查发现,在上述代码中缺少了 import scrapy 语句的前一个空格。修改正确后的代码如下:
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
allowed_domains = ['www.example.com']
def start_requests(self):
urls = ['http://www.example.com']
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
pass
接下来重新执行 scrapy crawl example
命令即可。
示例2
另外一个可能出现“invalid syntax”错误的示例是下述代码:
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
allowed_domains = ['www.example.com']
def start_requests(self):
urls = ['http://www.example.com']
for url in urls
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
pass
此时执行 scrapy crawl example
命令会报出如下错误:
File "/Users/jason/Documents/PythonProjects/scrapy_proj/spiders/example_spider.py", line 10
for url in urls
^
SyntaxError: invalid syntax
可以看到报错信息中指出了错误在 example_spider.py
文件的第10行,缺失了语句后面的冒号。修改正确后的代码如下:
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
allowed_domains = ['www.example.com']
def start_requests(self):
urls = ['http://www.example.com']
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
pass
最后重新执行 scrapy crawl example
命令即可。
以上就是 Scrapy 启动时遇到 invalid syntax 错误的解决攻略,希望能对读者有所帮助。