我现在知道为什么这段代码不适用于这个特定的站点。在其他情况下它工作正常。
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 (以及正上方和下方的部分)。
