使用Beautiful Soup进行Html解析返回空列表

时间:2013-04-04 21:11:24

标签: python django parsing beautifulsoup

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

    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

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

2 个答案:

答案 0 :(得分: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)-works。 lxml是默认(至少从4.1.3开始),如果您没有指定其他内容,BS将首先尝试。而且我已经看到libxml2 2.9.0的其他意外错误(其中大部分都已修复在主干上,但尚未发布2.9.1)。

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

但如果没有......对于我来说,对于我来说,使用stdlib html.parser的2.7.2肯定是有效的,而在聊天中你用2.7.1测试了同样的想法。虽然html.parser(尤其是在2.7.3之前)是缓慢而脆弱的,但对你来说似乎已经足够了。因此,最简单的解决方案是:

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

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

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

答案 1 :(得分:0)

我遇到了同样的问题,当地的美丽汤正在工作,而我的ubuntu服务器一直在返回一个空列表。 我在链接[1]后尝试了很多解析器并尝试了很多依赖

最后对我有用的是:

  • 删除美丽的肥皂装置
  • 删除所有依赖项(由apt-get install python-bs4指出)
  • 使用命令bellow
  • 再次安装

命令:

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]