Skip to main content
 首页 » 编程设计

python之用 Beautiful Soup 解析 Html 返回空列表

2025年05月04日11txw1958

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

    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 

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

请您参考如下方法:

无论您使用哪个解析器,您都发现了一个错误。

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

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 的其他意外错误(其中大部分已在 trunk 上修复,但尚未发布 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 (以及正上方和下方的部分)。