【问题标题】:BeautifulSoup fails to parse long view stateBeautifulSoup 无法解析长视图状态
【发布时间】:2013-08-11 15:03:36
【问题描述】:

我尝试使用 BeautifulSoup4 来解析从 http://exporter.nih.gov/ExPORTER_Catalog.aspx?index=0 检索到的 html 如果我打印出结果汤,它会像这样结束:

kZXI9IjAi"/></form></body></html>

在原始 html 中搜索最后一个字符 9IjaI,我发现它位于一个巨大的视图状态的中间。 BeautifulSoup 似乎对此有疑问。任何提示我可能做错了什么或如何解析这样的页面?

【问题讨论】:

    标签: python html-parsing beautifulsoup


    【解决方案1】:

    BeautifulSoup 使用pluggable HTML parser 构建“汤”;您需要尝试不同的解析器,因为每个解析器都会以不同的方式处理损坏的页面。

    但是,我使用任何解析器解析该页面都没有问题:

    >>> from beautifulsoup4 import BeautifulSoup
    >>> import requests
    >>> r = requests.get('http://exporter.nih.gov/ExPORTER_Catalog.aspx?index=0')
    >>> for parser in ('html.parser', 'lxml', 'html5lib'):
    ...     print repr(str(BeautifulSoup(r.text, parser))[-60:])
    ... 
    ';\r\npageTracker._trackPageview();\r\n</script>\n</body>\n</html>\n'
    '();\r\npageTracker._trackPageview();\r\n</script>\n</body></html>'
    '();\npageTracker._trackPageview();\n</script>\n\n\n</body></html>'
    

    确保您安装了最新的BeautifulSoup4 包,我已经看到在 4.2 中解决了 4.1 系列中的一致问题。

    【讨论】:

    • 只是想知道,r.text 是否在其他地方定义?或者是一个关键词
    • @sihrc:充实了我的样本; rrequests 库响应。
    • 我明白了.. 会是 requests.get 吗?还是可以调用请求?
    • 我错过了.get(),因为我是手动输入的,而不是搜索会话来复制它。糟糕,已更正。
    • 就我而言,lxml 似乎有问题。 html.parser 工作得很好。
    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 2018-09-12
    • 2012-10-04
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多