属性错误:'unicode'对象没有属性"xpath 问题"



我正试图通过xpath捕获一个位于"//html/body/table/tbody/tr/td[2]/table/tbody/tr[2]/td[17]/font"中的值。我不确定我做错了什么,但当运行下面的代码时,我收到了错误消息"AttributeError:'unicode'对象没有属性'xpath'"。你能帮我吗

import smtplib
import requests
#import bs4
from lxml import html
from email.mime.text import MIMEText

def login():
        url = "http://172.16.3.16/bkg/nimble/newsite_airfail_isimba_dom.php"
        r = requests.get(url, auth=('stats', 'Stats'))
        page = r.text
        return page

def extractfailure():
        loginpage = login()
        fail = loginpage.xpath('/html/body/table/tbody/tr/td[2]/table/tbody/tr[2]/td[17]/font')
        print fail
if __name__ == '__main__':
        extractfailure()

您似乎忘记了解析响应主体。

在使用XPath表达式之前,您需要在某个地方实际使用lxml.html解析器:

def extractfailure():
    loginpage = html.fromstring(login())
    fail = loginpage.xpath('/html/body/table/tbody/tr/td[2]/table/tbody/tr[2]/td[17]/font')
    print fail

如果文档中缺少<tbody>元素,请考虑浏览器会插入这些元素。LXML没有插入这些,所以您的浏览器源XPath表达式可能是错误的。

对于那些在使用xpath 时获得以下输出的人

[<Element font at 0xeee158>]

这是因为您没有给text((以使用xpath捕获文本,如下所示

//html/body/table//tr/td[2]/table//tr[2]/td[17]/font/text()

多亏了@Martijn Pieters ,我的问题现在得到了解决

这是的完整代码

def extractfailure():
    loginpage = html.fromstring(login())
    fail = loginpage.xpath('//html/body/table//tr/td[2]/table//tr[2]/td[17]/font/text()')
    failoutput = fail
    print failoutput

最新更新