Python爬虫记录-etree.HTML解析数据异常

文章讲述了作者在处理爬虫时遇到的编码问题,通过对比requests.get返回的text和content,发现使用content并指定正确编码解决AttributeError。
摘要由CSDN通过智能技术生成

这几天帮朋友写一个爬虫。可能因为太久没写爬虫了,总是遇到一些奇奇怪怪的问题,也可能是因为时间太久以至于忘了一些原理或者机制了。所以记录一下,防止以后遇到了又不知道是什么原因导致的。

描述

通过requests.get()方法获取到页面后,我使用了etree.HTML来解析该网页结构,再通过xpath提取出自己需要的内容。

核心代码:

response = requests.get(url, headers=headers)
html_obj = etree.HTML(response.text)
comments = html_obj.xpath('//span[@class="XXX"]/text()')

问题出现

本以为数据可以正常获取,结果发现程序报错了,报错信息为AttributeError: 'NoneType' object has no attribute 'xpath'

程序报错信息

解决

NoneType object has no attribute?试了下debug模式,发现在etree.HTML时没有获取到正确的Element对象,得到的是一个None

pycharm debug定位

OK。问题已经找到了,那么原因是什么呢?看下源码

etree.HTML源码说明

呃…好吧,换个思路。response中的text是Unicode编码,看了下页面,原来在页面中指定了编码UTF-8。

破案了,在lxml中是不支持解析带有coding声明的字符串,那么该怎么处理呢?

在response中有一个content,与text不同的是content是byte类型,那么就换成它来试试看。
lxml解析成功
搞定。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值