响应对象没有属性编码,scrapy错误

时间:2012-07-10 18:40:44

标签: python web-scraping scrapy

我在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)

知道可能是什么错误吗?这对我来说很奇怪,这段代码总是适用于我所有的其他蜘蛛

3 个答案:

答案 0 :(得分:4)

我没有时间调试它,但我的猜测是这个特殊情况下的response参数不是HtmlResponseTextResponse

在回调中执行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)