scrapy 中转换 utf-8 后说没有 xpath

2019-01-01 17:39:51 +08:00
 Ewig

response.body.decode(encoding="utf-8") linkList =response.body.decode(encoding="utf-8").xpath( '//td[@class="pming_black12 ms-rteTableOddCol-BlueTable_CHI"]/a/@href')

报错如下

ttributeError: 'str' object has no attribute 'xpath' 请问如何写才是正确的

2442 次点击
所在节点    Python
10 条回复
j0hnj
2019-01-01 17:54:03 +08:00
随手查了一下,`xpath` 是 response 对象的方法:

https://doc.scrapy.org/en/latest/topics/request-response.html#response-subclasses
chengxiao
2019-01-01 18:02:45 +08:00
先 xpath 再 encoding,而且 xpath 对象需要 extract
Ewig
2019-01-01 18:21:31 +08:00
@j0hnj 我知道啊,现在怎么写才是正确的
Ewig
2019-01-01 18:22:25 +08:00
@chengxiao linkList =response.xpath(u'//td[@class="pming_black12 ms-rteTableOddCol-BlueTable_CHI"]/a/@href').extract()这样写就是返回空了,你在 encoding 也不对啊
ioven
2019-01-01 19:43:03 +08:00
@Ewig xpath 写错了吧,而且 href 不需要解码
xiaoxinxiaobai
2019-01-01 19:57:53 +08:00
真可怕
15399905591
2019-01-02 09:46:39 +08:00
response.xpath( '//td[@class="pming_black12 ms-rteTableOddCol-BlueTable_CHI"]/a/@href')

有什么问题???
animal
2019-01-02 11:29:09 +08:00
楼主这个用法不太对。1.xpath 是 selector 的方法,而 response.body 的类型是 bytes ; 2.楼上所说的 response.xpath 是 TextResponse 类(scrapy 的默认 downloader 会根据 content-type 自动转换)的方法,如果你用 response.xpath 提示报错,说明这个 response 的 content-type 不是文本格式(可能是图片,应用之类的)
Ewig
2019-01-02 17:38:24 +08:00
@15399905591 我都说了这里的 response 返回的是乱码,你这样直接 xpath 匹配的肯定是空?你没明白我的意思?
Ewig
2019-01-02 17:39:00 +08:00
@animal 因为编码不对是 乱码,所以 xpath 匹配不到

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/522900

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX