IndexError:列表索引超出范围

时间:2013-04-19 13:14:30

标签: 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

1 个答案:

答案 0 :(得分:3)

在此处使用r.content时,您应该真正使用r.text StringIO

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

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

让解析器直接读取响应。

如果你得到IndexError异常,那么你的XPath表达式与页面中的任何内容都不匹配。您将不得不保存HTML并手动分析它以查看该页面的不同之处。