我现在已经知道为什么这段代码不适用于这个特定网站。在其他情况下,它可以正常工作。
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
在这种情况下,它打印“[]”,但显然有一些链接。 有什么想法吗?:)
答案 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]后尝试了很多解析器并尝试了很多依赖
最后对我有用的是:
命令:
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]