我在scrapy中收到此错误
File "/usr/lib/pymodules/python2.7/scrapy/selector/factories.py", line 20, in body_as_utf8
if response.encoding in utf8_encodings:
exceptions.AttributeError: 'Response' object has no attribute 'encoding'
导致它的代码只是scrapy spider中的以下内容
def parse(self, response):
hxs = HtmlXPathSelector(response)
我正在尝试解析网址
http://itunes.apple.com/WebObjects/MZStore.woa/wa/customerReviews?id=382034404%0A
使用用户代理字符串
iTunes/10.2 (Macintosh; U; PPC Mac OS X 10.2)
知道可能是什么错误吗?这对我来说很奇怪,这段代码总是适用于我所有的其他蜘蛛
答案 0 :(得分:4)
我没有时间调试它,但我的猜测是这个特殊情况下的response
参数不是HtmlResponse
或TextResponse
。
在回调中执行print response.__class__
如果类是scrapy.http.response.Response
,那么我猜它是url返回非文本响应,显然是没有任何encoding
的字节流,你不能在它上面使用xpath。
答案 1 :(得分:2)
不确定这是否非常有用,但也许可以帮助指导您或其他人。
我遇到了类似的错误:
'响应'对象没有属性'已过去'
通过更新requests
依赖关系解决了问题:
sudo apt-get install python-pip
sudo pip install --upgrade requests
所以也许你有一个提供属性encoding
的依赖项?
答案 2 :(得分:0)
请尝试这种方式:
def parse(self, response):
hxs = HtmlXPathSelector(text=response.body)