【问题标题】:LXML does not parse broken HTML : XMLSyntaxError error finding by XPathLXML 不解析损坏的 HTML:XPath 发现 XMLSyntaxError 错误
【发布时间】:2019-07-23 17:10:01
【问题描述】:

我正在尝试从登录页面中提取 csrf 令牌。 我正在使用 lxml 库作为解析器。

s = requests.Session()
    login_html = etree.fromstring(
        s.get('https://www.uwkotinleuven.be/fr/login').text)
    find = etree.XPath('//*[@id="login-form-2"]/input[3]')
    print(find(login_html).value )

这是错误: lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: link line 19 and head, line 46, column 24 我不确定错误是来自 XPath 查找器,还是来自发送的任何损坏的 HTML。

我应该更改解析,还是提供参数?是否有解析损坏的 HTML 的常规方法?

【问题讨论】:

    标签: parsing web-scraping lxml


    【解决方案1】:

    这看起来像是一个损坏的 html 问题。看看这是否适合你:

    import requests
    import lxml.etree as etree
    from io import StringIO
    
    s = requests.Session()
    dat = s.get('https://www.uwkotinleuven.be/fr/login')
    
    parser = etree.HTMLParser()
    tree   = etree.parse(StringIO(dat.text), parser)
    
    find = tree.xpath('//*[@id="login-form-2"]/input[3]')
    print(find[0].attrib.values()[2])
    

    输出:

    3pKL_AsLLBE07T6S-VY8eXJ4ooK_QH5kMgajPEwKSso

    【讨论】:

    • 是的,这行得通!是不是因为 HTML 被破坏了,我们才遇到了创建 etree.parser 的麻烦?
    • @Falanpin - 完全正确。
    猜你喜欢
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2017-05-08
    • 2011-07-18
    • 1970-01-01
    • 2012-01-16
    相关资源
    最近更新 更多