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".不知道为什么
如果您没有明确指定解析器,BeautifulSoup则会根据排名选择解析器:
\n\n\n如果您不指定任何内容,您将获得安装的最佳 HTML 解析器。Beautiful Soup 将 lxml\xe2\x80\x99s 解析器评为最佳,然后是 html5lib\xe2\x80\x99s,然后是 Python\xe2\x80\x99s 内置解析器。
\n
显式指定解析器:
\n\nsoup = BeautifulSoup(data, \'html5lib\')\nsoup = BeautifulSoup(data, \'html.parser\')\nsoup = BeautifulSoup(data, \'lxml\')\nRun Code Online (Sandbox Code Playgroud)\n