PyQuery的坑 - longlongwood/blog GitHub Wiki
PyQuery是个解析HTML的库,看它的源代码非常简单,底层调用的都是lxml的东西,不知道为什么要用这个。
1、它读取本地文件的时候,只是简单调用了python的open函数,唯一的参数就是文件路径,后面的参数一概不加,所以如果那个文件有编码问题或者其他问题,它是不懂处理的,如果遇到了编码问题,只能先手动open,加上encoding关键字和errors关键字,然后read,得到了一个字符串之后再传给PyQuery。
with open(r'd:\python\iPad.htm','r',encoding='utf-8',errors="ignore") as f:
htm = f.read()
d = pq(htm)
2、用类似jQuery的过滤器找到了一堆元素之后,这堆元素还是PyQuery对象,但是里面的每个元素却成了lxml的Element对象,所以对这堆元素的每一个调用text()方法会提示错误,需要调用Element的text_content()方法,对这些元素继续查找子元素,也不能用PyQuery的方法,而要用lxml的方法,真是坑爹。
for item in items:
print(item.text_content())
3、昨天又遇到一个奇怪的问题,通过复制网页HTML到本地文件,然后通过PyQuery读取解析,可以通过标签名过滤到元素,但是通过Selenium调用浏览器获取pagesource作为解析源,却怎么也不能通过标签名查找出元素,只能通过id或者class查找,但有些元素没有id和class,就无论如何都找不出来,只能通过找到上一级,然后调用children方法,然后再通过序号找到那个元素,真是莫名其妙。