Scrapy启动报错invalid syntax的解决

  • Post category:Python

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 错误的解决攻略,希望能对读者有所帮助。