的HTML是壞,你需要一個不同的解析器,你可以使用LXML如果您有它:
soup = BeautifulSoup(r.content, 'lxml')
或者使用html5lib:
soup = BeautifulSoup(r.content, 'html5lib')
LXML有像libxml,html5lib的依賴關係可以與pip一起安裝。
In [9]: url = "http://www.krak.dk/cafe/s%C3%B8g.cs?consumer=suggest?search_word=cafe"
In [10]: r = requests.get(url)
In [11]: soup = BeautifulSoup(r.content, 'html.parser')
In [12]: len(soup.find_all("ol", {"class": "hit-list"}))Out[12]: 0
In [13]: soup = BeautifulSoup(r.content, 'lxml')
In [14]: len(soup.find_all("ol", {"class": "hit-list"}))
Out[14]: 1
In [15]: soup = BeautifulSoup(r.content, 'html5lib')
In [16]: len(soup.find_all("ol", {"class": "hit-list"}))
Out[16]: 1
也有隻有一個hit-list
所以你可以用找到的地方find_all的,你可以使用也使用id soup.find(id="hit-list")
。如果您通過運行html來訪問w3c's html validator,則可以看到有很多問題。