AttributeError: 'unicode' object has no attribute 'xpath issue

AttributeError: 'unicode' object has no attribute 'xpath issue

我正在尝试通过 xpath 捕获“//html/body/table/tbody/tr/td[2]/table/tbody/tr[2]/td[17]/font”中的值。我不确定我做错了什么但是当 运行 下面的代码时我收到错误消息 "AttributeError: 'unicode' object has no attribute '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()

您似乎忘记了解析响应正文。

您需要在某处实际使用 lxml.html 解析器才能使用 XPath 表达式:

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