2

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

    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

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

4

2 回答 2

1

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

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

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是 BS 将首先尝试的默认设置(至少从 4.1.3 开始)。我还看到了 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')

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

有关详细信息,请参阅指定要使用的解析器(以及上方和下方的部分)。

于 2013-04-04T21:53:43.343 回答
0

我遇到了同样的问题,在本地 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]

于 2015-07-24T19:35:48.563 回答