Scrapy报错load_item error: <class 'AttributeError'>, 'TextResponse' object has no attribute 'json', html.py, 138
时间: 2023-06-21 11:09:24 浏览: 116
这个错误是由于你在使用`response.json()`方法,而Scrapy的`TextResponse`对象并没有这个属性。`response.json()`方法是用来解析JSON格式的response对象的,如果你的response是HTML格式的,则会报错。
如果你需要解析HTML页面中的数据,你可以使用Scrapy自带的`Selector`选择器来提取数据。具体操作如下:
1. 在Spider类中引入`Selector`:
```python
from scrapy.selector import Selector
```
2. 使用`Selector`选择器提取数据:
```python
def parse(self, response):
# 提取title标签中的文本
title = response.css('title::text').get()
# 提取所有p标签中的文本
paragraphs = response.css('p::text').getall()
```
这样就可以避免`response.json()`方法报错的问题了。
相关问题
Scrapy报错load_item error: <class AttributeError >, TextResponse object has no attribute json , html.py, 138
这个报错提示是因为在`load_item`函数里使用了`response.json()`方法,而`TextResponse`对象没有该方法,只有`JsonResponse`对象才有。
因此,你需要检查一下你的代码,确认在哪个地方使用了`response.json()`方法。如果你确实需要将response转换成json格式,可以使用`json.loads(response.text)`方法来实现。如果不需要转换成json格式,可以直接使用`response.text`来获取response的文本内容。
另外,还需要注意一下response的类型,确保它是`JsonResponse`对象或者`TextResponse`对象。如果不是这两种类型,你需要检查一下爬虫的代码,找出是在哪个地方将response转换成了其他类型。
scrapy报错 ERROR: load_item error: <class 'AttributeError'>, 'list' object has no attribute 'get', html.py, 201
这个错误提示是由于在Scrapy中的某个Item定义中,使用了类似于`item['xxx'] = []` 的语句,而在后续的Item Pipeline中使用了`item['xxx'].get()`或`item['xxx'][0].get()`等获取属性值的语句。
这里的问题在于,`[]`表示一个空列表,并不是一个可以直接获取属性值的对象。因此,当你在后续的Pipeline中使用`item['xxx'].get()`或`item['xxx'][0].get()`等语句时,就会出现上述的错误提示。
解决方法就是在Item定义中,将`[]`替换成`None`,或者将`[]`替换成一个包含默认值的列表,例如`item['xxx'] = ['default_value']`。这样,在后续的Pipeline中使用`item['xxx'].get()`或`item['xxx'][0].get()`等语句时,就不会出现上述的错误提示了。
阅读全文