python - 索引错误: list index out of range

标签 python lxml python-requests

我目前正在编写一段代码,该代码似乎适用于多个网站,但是当再次运行下面的网站时,我收到错误。 IndexError:列表索引超出范围。起初我以为我的 xpath 是无效的,但经过进一步研究 xpath 我知道它是正确的。我唯一的另一个想法是,我可能需要提供浏览器用户代理等来模拟浏览器访问网站。

这是失败的代码部分

def safeweb(host):
    print "[*] Launching Norton Safeweb plugin against " + host
    url = 'http://safeweb.norton.com/report/show?url=' + host
    r = requests.get(url)
    html = r.text 
    #print html
    parser = etree.HTMLParser()
    tree = etree.parse(StringIO.StringIO(html), parser)
    #reporting starts here
    summary = tree.xpath("//*[@id='siteSummary']/table/tbody/tr[1]/td[2]/div/div[1]/div[2]/div")
    #print len(summary)
    print "[*] Summary: " + summary[0].text

最佳答案

在此处使用 StringIO 时,您确实应该使用 r.content,而不是 r.text

r.text 为您提供 unicode,r.content 为您提供原始字节。接下来,不需要使用StringIO.StringIOetree.fromstring(html)就可以正常工作。更好的是,将原始响应传递给.parse():

tree = etree.parse(r.raw, parser)

并让解析器直接读取响应。

如果您仍然收到 IndexError 异常,则您的 XPath 表达式与页面中的任何内容都不匹配。您必须保存 HTML 并手动分析它以查看该页面有什么不同。

关于python - 索引错误: list index out of range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16105507/

相关文章:

python - 用 lxml.html 替换元素

python - lxml 过滤子标签之间没有文本的 HTML 标签

python - 如何在python中从url获取文件?

json - 如何阻止 Python 的 Requests 库去除转义字符?

python - 如何在 python 3 中发出 https 请求

python - 在Python中使用Unix命令(在我的例子中是node.js/lessc)?

python - 将两个图合并为一个图

python - 使用 Python 进行 HTML 解析

python - 使用 lxml 将 XML 转换为 python 对象

python - 用于 python 的 Exif 操作库