requests的content与text导致lxml的解析问题
2015-10-07 19:17
441 查看
title: requests的content与text导致lxml的解析问题
date: 2015-04-29 22:49:31
categories: 经验
tags: [Python,lxml,etree]
---
最近实习工作任务比较重,又在做数据挖掘的教学工作,同时还在做毕设,所以博客更新比较慢。不过最近肯定会有大动作。
闲话毕,转正题。在制作新浪微博模拟登录的部分时,遇到了一些问题。
我使用requests获取了新浪微博的源代码,通过lxml库的etree.HTML来处理一段网页源代码,从而生成一个可以被xpath解析的对象。
遇到报错:
根据报错信息推测,可能是因为不支持编码声明的Unicode字符串。Google发现这个问题在2012年就已经有人提交给作者了,但是一直没有被修复。地址在->https://gist.github.com/karlcow/3258330
不过下面的人也给出了解决办法:
首先将源代码转化成比特数组,然后再将比特数组转化成一个比特对象。这样就可以绕过这个bug。
然而,又有人认为这不是一个bug, 所以一直没有被修复。这是由于,我获取源代码是使用r.text
而如果使用r.content:
就不会报错。
那r.text与r.content有什么区别呢?分析requests的源代码发现,r.text返回的是Unicode型的数据,而使用r.content返回的是bytes型的数据。也就是说,在使用r.content的时候,他已经只带了
这样一个转化了。
最近CentOS都声明放弃Python2了,编码问题确实浪费了很多时间,等空下来转Python3吧~
date: 2015-04-29 22:49:31
categories: 经验
tags: [Python,lxml,etree]
---
最近实习工作任务比较重,又在做数据挖掘的教学工作,同时还在做毕设,所以博客更新比较慢。不过最近肯定会有大动作。
闲话毕,转正题。在制作新浪微博模拟登录的部分时,遇到了一些问题。
我使用requests获取了新浪微博的源代码,通过lxml库的etree.HTML来处理一段网页源代码,从而生成一个可以被xpath解析的对象。
selector = etree.HTML(html)
遇到报错:
selector = etree.HTML(html) File "lxml.etree.pyx", line 2953, in lxml.etree.HTML (src\lxml\lxml.etree.c:66734) File "parser.pxi", line 1780, in lxml.etree._parseMemoryDocument (src\lxml\lxml.etree.c:101591) ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.
根据报错信息推测,可能是因为不支持编码声明的Unicode字符串。Google发现这个问题在2012年就已经有人提交给作者了,但是一直没有被修复。地址在->https://gist.github.com/karlcow/3258330
不过下面的人也给出了解决办法:
html = bytes(bytearray(html, encoding='utf-8')) selector = etree.HTML(html)
首先将源代码转化成比特数组,然后再将比特数组转化成一个比特对象。这样就可以绕过这个bug。
然而,又有人认为这不是一个bug, 所以一直没有被修复。这是由于,我获取源代码是使用r.text
html = requests.get('xxxxxx',cookies=cookies).text
而如果使用r.content:
html = requests.get('xxxxxx',cookies=cookies).content
就不会报错。
那r.text与r.content有什么区别呢?分析requests的源代码发现,r.text返回的是Unicode型的数据,而使用r.content返回的是bytes型的数据。也就是说,在使用r.content的时候,他已经只带了
html = bytes(bytearray(html, encoding='utf-8'))
这样一个转化了。
最近CentOS都声明放弃Python2了,编码问题确实浪费了很多时间,等空下来转Python3吧~
相关文章推荐
- 第三十一篇:UIView常用属性与方法
- Logistic Regression – Geometric Intuition
- rcvd lcp termreq id=0x2 mppe required but not available
- request.getRequestURL()和request.getRequestURI()
- hdu4296Buildings 贪心
- IOS 键盘的显示与关闭,以及移动显示(UITextView处理完整版)
- [LeetCode]: 96: Unique Binary Search Trees
- String、StringBuffer、StringBuilder区别及使用场合
- IOS UITabelView的cell
- 在DuiLib开发的客户端里面使用CEF
- volley(2)——自定义request
- iOS-UIColor使用16进制来选取颜色.
- 自定义UIImageView点击事件
- 转-iOS- GPUImage README.md
- 浅谈UIView
- APUE读书笔记(二):文件和目录
- UESTC 92 Journey(LCA或树剖)
- UESTC 1087 【二分查找】
- SpriteBuilder中粒子发射器的reset on visibility toggle选项解释
- SpriteBuilder中粒子发射器的reset on visibility toggle选项解释