scrapy爬虫之SyntaxError: can't assign to literal

在执行Scrapy爬虫时遇到`SyntaxError: can't assign to literal`错误。问题根源是CSS选择器语句中使用了单引号而不是双引号,修正方法是将CSS语句中括号内的单引号替换为双引号。

问题描述:

当执行scrapy crawl tutu时,报出如下错误:

[root@Uu tutu]# scrapy crawl tutu
Traceback (most recent call last):
  File "/usr/bin/scrapy", line 11, in <module>
    sys.exit(execute())
  File "/usr/lib64/python2.7/site-packages/scrapy/cmdline.py", line 149, in execute
    cmd.crawler_process = CrawlerProcess(settings)
  File "/usr/lib64/python2.7/site-packages/scrapy/crawler.py", line 249, in __init__
    super(CrawlerProcess, self).__init__(settings)
  File "/usr/lib64/python2.7/site-packages/scrapy/crawler.py", line 137, in __init__
    self.spider_loader = _get_spider_loader(settings)
  File "/usr/lib64/python2.7/site-packages/scrapy/crawler.py", line 336, in _get_spider_loader
    return loader_cls.from_settings(settings.frozencopy())
  File "/usr/lib64/python2.7/site-packages/scrapy/spiderloader.py", line 61, in from_settings
    return cls(settings)
  File "/usr/lib64/python2.7/site-packages/scrapy/spiderloader.py", line 25, in __init__
    self._load_all_spiders()
  File "/usr/lib64/python2.7/site-packages/scrapy/spiderloader.py", line 47, in _load_all_spiders
    for module in walk_modules(name):
  File "/usr/lib64/python2.7/site-packages/scrapy/utils/misc.py", line 71, in walk_modules
    submod = import_module(fullpath)
  File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/home/BS/scrapy/tutu/tutu/spiders/tutu_spider.py", line 12
    imgurls = ['imgurl'] = response.css('.post img::attr(src)').extract()
SyntaxError: can't assign to literal

可知,这是一个语法错误:不能指定到文字。

经分析,问题解决如下:

问题解决:

 

[root@Uu tutu]# cd tutu/spiders/
[root@Uu spiders]# vi tutu_spider.py 
import scrapy
from tutu.items import TutuItem

class TutuSpider(scrapy.Spider):
        name = 'tutu'
        allowed_domains = ['lab.scrapyd.cn']
        start_urls = [
                'http://lab.scrapyd.cn/archives/55.html'
        ]
        def parse(self , response):
                item = TutuItem()
                imgurls = response.css(".post img::attr(src)").extr
act()
                item['imgurl'] = imgurls
                yield item
~
~
~
~
~
"tutu_spider.py" 14L, 345C written

 分析得知,是css语句的问题,即,css的括号中要用双引号,不能用单引号。

即,将css语句中括号内的单引号换成双引号即可。

 

### Python 中 `SyntaxError: cannot assign to literal` 的解决方案 在 Python 编程中,`SyntaxError: cannot assign to literal` 表示尝试将值分配给一个不可变的对象或字面量。例如,在代码片段 `1 = a` 中试图将变量 `a` 赋值给整数常量 `1` 是非法操作[^1]。 #### 原因分析 此错误通常由以下几种情况引起: 1. **赋值方向错误**:Python 使用左值(lvalue)来存储右值(rvalue),即变量名应在等号左侧而表达式应位于右侧。如果颠倒顺序,则会引发此类错误[^3]。 2. **拼写错误**:有时开发者可能不小心输入了一个数值或者字符串作为目标对象的一部分,而非实际意图使用的变量名称[^2]。 #### 正确做法 为了修正上述问题,应该遵循标准语法规则——确保所有的赋值都是从合法的可修改实体开始。下面给出几个例子说明如何改正这些类型的错误: - 如果原本有如下不正确的代码行: ```python 1 = a ``` 应该调整为合理的逻辑形式比如交换位置让左边成为有效的接收者像这样: ```python a = 1 ``` 另外需要注意的是即使看起来合理也可能存在其他潜在陷阱比如说列表推导式的内部结构不当同样会造成类似的异常状况所以务必仔细检查整个程序流程确认每一步都符合预期行为模式[^4]。 以下是经过改进后的Scrapy爬虫部分代码展示正确书写方式避免出现之前提到过的那种低级失误: ```python import scrapy from tutu.items import TutuItem class TutuSpider(scrapy.Spider): name = 'tutu' allowed_domains = ['lab.scrapyd.cn'] start_urls = ['http://lab.scrapyd.cn/archives/55.html'] def parse(self, response): item = TutuItem() imgurls = response.css(".post img::attr(src)").extract() item['imgurl'] = imgurls return item ``` 通过以上调整不仅解决了原始报错还提升了整体代码质量使其更加健壮可靠不易再次发生同类事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值