lxml 的 xpath 的一个 BUG,不知道你们遇到没?

2018-11-10 18:20:40 +08:00
 smallgoogle

最近在做网易云个人信息遍历抓取;
那么毛病就来了;
https://music.163.com/user/home?id=29879272
https://music.163.com/user/home?id=132128

这是两个个人主页; 29879272 这个呢,etree.HTML(源码),可以完全解析 html。

132128 这个呢,就 BUG 了,etree.HTML(源码),发现 html 被截断。

会被源码里面的 description 的 —— 双横线给截断了。简直奇葩;

有没有大神 look look。我发现这是一个 BUG

2245 次点击
所在节点    Python
7 条回复
itskingname
2018-11-10 18:35:44 +08:00
lxml 不要用 etree.HTML。换成

from lxml.html import fromstring

selector = fromstring(source)
selector.xpath(...)
smallgoogle
2018-11-10 19:31:09 +08:00
@itskingname 一样的。都会被那个双横线给截断掉。
ioven
2018-11-11 08:36:26 +08:00
>音乐人。不定义,不局限。 —\\u0000 —\\u0000 微博

被零字符截断了,替换掉就行
smallgoogle
2018-11-12 12:52:45 +08:00
@ioven 我是不是要先替换,才行。
ioven
2018-11-12 15:04:42 +08:00
@smallgoogle selector = fromstring(source.replace('\u0000', ''))

之后正常使用
rocketman13
2018-11-13 19:24:50 +08:00
最近处理 PostgreSQl 数据库写入时也遇到过\u0000 不能解析,字符串中 replace 掉就好了
canwushuang
2018-11-14 17:22:25 +08:00
python 模块采用 c 编写导致,而\u0000 是 unicode 表示的一个特殊字符,,在 c 里面用这个字符作为字符串结束的标志。

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

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

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

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

© 2021 V2EX