我想从链接中删除顶级获利者(%)的数据,但返回UnicodeDecodeError: 'utf8' codec can't decode byte 0x93 in position 211: invalid start byte
import requests
from lxml import html
page_indo = requests.get('http://www.sinarmassekuritas.co.id/id/index.asp')
indo = html.fromstring(page_indo.content)
indo = indo.xpath('//tr/td/text()')
当我查看页面的来源时,我在第211行找不到任何奇怪的东西。请指导如何避免此错误并将数据放入表格
中的最高赢家(%)更新
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script type="text/javascript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);`
我不确定211试图指出的是什么。 Triplee表示从违规行开始是第211个字符
如果从<!DOCTYPE html
计算,则该字符为(...重新加载窗口...) i
如果从<script type="text/javascript">
开始计算,那么它将是document.MM**_**
我不确定这两个中的一个会导致错误
答案 0 :(得分:0)
我下载了此数据的副本,并在偏移量103826处找到了有问题的字符。来自lxml
的错误消息对于调试此内容并非非常有用。
文件中该位置的上下文(包装易读)
b'tas Pancasakti Tegal dengan tema : \x93Pasar Modal sebagai'
b' indikator perekonomian negaradan peluang investasi pasar '
b'modal\x94.</td>'
我不会说这种语言(印度尼西亚马来语?)所以我不知道这个有问题的人物应该代表什么,但是https://tripleee.github.io/8bit#93建议在一些遗产中留下一个左卷曲的引用U+201C Windows 8位编码和此片段末尾的\x94
似乎强化了这种猜测。
答案 1 :(得分:0)
对于希望解决unicode和XPath这个问题的其他人来说,它适用于我:
假设使用page = requests.get(url)
,而不是使用以下方式创建lxml的html树:
tree = html.fromstring(page.content)
使用此:
tree = html.fromstring(page.content.decode("utf-8", "replace"))