我正在尝试使用此处提供的HTML抓取工具。他们提供的示例效果很好。但是,当我尝试在网页上使用它时,出现此错误-Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.
我尝试使用Google谷歌搜索,但是找不到解决方案。我真的很感谢您的帮助。我想知道是否可以使用Python将其复制为HTML。
编辑:
from lxml import html
import requests
page = requests.get('http://cancer.sanger.ac.uk/cosmic/gene/analysis?ln=PTEN&ln1=PTEN&start=130&end=140&coords=bp%3AAA&sn=&ss=&hn=&sh=&id=15#')
tree = html.fromstring(page.text)
谢谢。
简短的答案:使用page.content
,而不是page.text
。
来自http://lxml.de/parsing.html#python-unicode-strings:
lxml.etree中的解析器可以立即处理unicode字符串...但是,这要求unicode字符串本身不指定冲突的编码,因此要取决于它们的真实编码
从http://docs.python-requests.org/en/latest/user/quickstart/#response-content:
请求将自动解码来自服务器的内容(为[as
r.text
])。...您还可以以字节[asr.content
]的形式访问响应主体。
因此,您看到了两者,requests.text
并lxml.etree
希望将utf-8解码为unicode。但是,如果我们requests.text
进行解码,那么xml文件中的编码语句将成为谎言。
因此,让我们requests.content
不进行解码。这样,lxml
将收到一个始终未解码的文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句