python - 在 Django 中引发 AttributeError(f"Use item[{name!r}] = {value!r} to set field value")
问题描述
我们正在学习将 Scrapy 与 Django 连接的教程。
这是我们的 model.py 文件:
class Siteinformation(models.Model):
unique_id = models.CharField(max_length=100, null=True)
data = models.CharField(max_length=1000, null=True)
timestamp = models.DateTimeField(default=timezone.now)
@property
def to_dict(self):
data = {
'data': json.loads(self.data),
'timestamp': self.timestamp
}
return data
def __str__(self):
return self.unique_id
这是 pipelines.py 文件:
class ShopspiderappPipeline(object):
def __init__(self, unique_id, *args, **kwargs):
self.unique_id = unique_id
self.items = []
@classmethod
def from_crawler(cls, crawler):
return cls(
unique_id=crawler.settings.get('unique_id'),
)
def close_spider(self, spider):
item = Siteinformation()
item.unique_id = self.unique_id
item.data = json.dumps(self.items)
item.save()
def process_item(self, item, spider):
self.items.append(item['url'])
return item
这是 spider.py 文件:
class ShopSpider(CrawlSpider):
name = 'shop'
def __init__(self, *args, **kwargs):
self.url = kwargs.get('url')
self.domain = kwargs.get('domain')
self.start_urls = [self.url]
self.allowed_domains = [self.domain]
ShopSpider.rules = [
Rule(LinkExtractor(unique=True), callback='parse_item'),
]
super(ShopSpider, self).__init__(*args, **kwargs)
def parse_item(self, response):
item = Siteinformation()
item = {}
item['url'] = response.url
yield item
不幸的是,它产生了这个错误:
2021-06-29 17:17:45 [scrapy.core.engine] ERROR: Scraper close failure
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/twisted/internet/defer.py", line 662, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/Users/.../.../..../shopspiderapp/shopspiderapp/pipelines.py", line 31, in close_spider
item.unique_id = self.unique_id
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/scrapy/item.py", line 112, in __setattr__
raise AttributeError(f"Use item[{name!r}] = {value!r} to set field value")
AttributeError: Use item['unique_id'] = '0a55d509-bd36-49ba-b3c8-313fbadcd3de' to set field value
这个 AttributeError 是什么意思?没有数据写入数据库。关于解决问题的任何想法?
解决方案
推荐阅读
- java - 将 Spring Boot 部署到 WebLogic 10.3.6
- java - 将 json 值密钥对解压缩为 SharedPreferences 的变量
- c# - Slack 集成 - 如何在发布到频道时使用 @ 通知用户
- scala - 预期类型不匹配:Option[Color],实际:Color
- wxpython - wxPython RichTextCtrl 中的上标
- azure - 在 Azure Functions 的 SignalR 服务中向一组用户发送消息
- python - coap协议get方法使用python
- microsoft-graph-api - Microsoft Teams:所有者通过 ms graph 添加后无法创建其他应用程序
- linux - 将 DMA 相干内存映射到用户空间
- algorithm - 我的合并排序代码返回了相同的输入数组