【问题标题】:Html parsing with Beautiful Soup returns empty list使用 Beautiful Soup 进行 Html 解析返回空列表
【发布时间】:2013-03-27 03:38:52
【问题描述】:

我现在知道为什么这段代码不适用于这个特定的站点。在其他情况下,它工作正常。

    url = "http://www.i-apteka.pl/search.php?node=443&counter=all"
    content = requests.get(url).text
    soup = BeautifulSoup(content)

    links = soup.find_all("a", class_="n63009_prod_link")
    print links

在这种情况下,它打印“[]”,但显然有一些链接。 有什么想法吗?:)

【问题讨论】:

  • 我没有看到任何带有 n63009_table_out 类的链接。该类唯一的东西是div。你的意思是soup.select('.n63009_table_out a')
  • 是的,该类唯一的东西是div。所以代码工作正常——它成功返回了该类的所有 0 链接。
  • 小错误,现在正确但还是返回[]
  • 而且这个类看起来很自动生成。感觉随时都有可能改变。
  • 有了n63009_prod_link,你的代码对我有用,我得到了 23 个链接。

标签: python django parsing beautifulsoup


【解决方案1】:

我遇到了同样的问题,Beautiful Soup 在本地工作,而我的 ubuntu 服务器上一直返回一个空列表。 我在链接 [1] 之后尝试了许多解析器并尝试了许多依赖项

最后对我有用的是:

  • 移除漂亮的肥皂装置
  • 删除其所有依赖项(由 apt-get install python-bs4 指向)
  • 使用下面的命令再次安装它

命令:

sudo apt-get install python-bs4

pip install beautifulsoup4

我正在使用以下代码:

soup = BeautifulSoup(my_html_content, 'html.parser')

[http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser][1]

【讨论】:

    【解决方案2】:

    您在使用的任何解析器中都发现了一个错误。

    我不知道您使用的是哪个解析器,但我知道:

    Python 2.7.2(来自 Apple)、BS 4.1.3(来自 pip)、libxml2 2.9.0(来自 Homebrew)、lxml 3.1.0(来自 pip)得到与您完全相同的错误。我尝试的所有其他东西——包括与上面相同的东西,除了 libxml2 2.7.8(来自 Apple)——都有效。 lxml 是默认值(至少从 4.1.3 开始),如果您不指定其他任何内容,BS 将首先尝试。我还看到了 libxml2 2.9.0 的其他意外错误(其中大部分已在主干上修复,但尚未发布 2.9.1)。

    因此,如果这是您的问题,您可能希望降级到 2.8.0 和/或从树的顶部构建它。

    但如果不是……它绝对适用于 2.7.2 和 stdlib html.parser,并且在聊天中你测试了与 2.7.1 相同的想法。虽然html.parser(尤其是在 2.7.3 之前)缓慢而脆弱,但它似乎对你来说已经足够好了。因此,最简单的解决方案是这样做:

    soup = BeautifulSoup(content, 'html.parser')
    

    … 而不是让它选择它最喜欢的解析器。

    有关详细信息,请参阅Specifying the parser to use(以及正上方和下方的部分)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2011-09-27
      • 1970-01-01
      相关资源
      最近更新 更多