Beautifulsoup无法找到所有

sla*_*law 5 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))
Run Code Online (Sandbox Code Playgroud)

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

14, 25
12, 25
25, 25
15, 25 
15, 25
17, 25
17, 25
15, 25
14, 25
Run Code Online (Sandbox Code Playgroud)

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

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

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

更新3当我多次运行这个简单的脚本时,我有时会得到"分段错误:11".不知道为什么

ale*_*cxe 1

底层使用的解析器之间存在差异BeautifulSoup

\n\n

如果您没有明确指定解析器,BeautifulSoup则会根据排名选择解析器

\n\n
\n

如果您不指定任何内容,您将获得安装的最佳 HTML 解析器。Beautiful Soup 将 lxml\xe2\x80\x99s 解析器评为最佳,然后是 html5lib\xe2\x80\x99s,然后是 Python\xe2\x80\x99s 内置解析器。

\n
\n\n

显式指定解析器:

\n\n
soup = BeautifulSoup(data, \'html5lib\')\nsoup = BeautifulSoup(data, \'html.parser\')\nsoup = BeautifulSoup(data, \'lxml\')\n
Run Code Online (Sandbox Code Playgroud)\n