Beautifulsoup无法找到所有

时间:2015-06-06 06:33:14

标签: python beautifulsoup

我正在试图抓住nature.com对期刊文章进行一些分析。当我执行以下操作时:

import requests
from bs4 import BeautifulSoup
import re

query = "http://www.nature.com/search?journal=nature&order=date_desc"

for page in range (1, 10):
    req = requests.get(query + "&page=" + str(page))
    soup = BeautifulSoup(req.text)
    cards = soup.findAll("li", "mb20 card cleared")
    matches = re.findall('mb20 card cleared', req.text)
    print(len(cards), len(matches))

我希望Beautifulsoup打印“25”(搜索结果的数量)10次(每页一次),但事实并非如此。相反,它打印:

14, 25
12, 25
25, 25
15, 25 
15, 25
17, 25
17, 25
15, 25
14, 25

查看html源代码显示每页应该返回25个结果,但是Beautifulsoup似乎在这里混淆了,我无法弄清楚原因。

更新1 如果重要,我使用Anaconda Python 2.7.10和bs4版本4.3.1在Mac OSX Mavericks上运行

更新2 我添加了一个正则表达式,表明req.text确实包含了我正在寻找的东西,但是beautifulsoup没有找到它

更新3 当我多次运行这个简单的脚本时,我有时会得到“Segmentation fault:11”。不确定为什么

1 个答案:

答案 0 :(得分:1)

differences之间有parsers used by BeautifulSoup under-the-hood

如果您未明确指定解析器,BeautifulSoupchoose the one based on rank

  

如果您没有指定任何内容,您将获得最佳的HTML解析器   安装。然后,Beautiful Soup将lxml的解析器列为最佳解析器   html5lib,然后是Python的内置解析器。

明确指定解析器:

soup = BeautifulSoup(data, 'html5lib')
soup = BeautifulSoup(data, 'html.parser')
soup = BeautifulSoup(data, 'lxml')