2017-02-12 109 views
0

我对网络抓取很陌生。我想从here那里获取数据,主要是有关国家的年份,国家和国内生产总值的权利数据。如何使用Python从本网站刮取所有数据

我的代码如下:

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
data = "http://databank.worldbank.org/data/reports.aspx?source=2&series=NY.GDP.MKTP.CD&country=#" 
page = urlopen(data) 

soup = BeautifulSoup(page,'html.parser') 
name_box = soup.find('div',attrs = {'class':'canvas'}) 
name = name_box.text.strip() 

print(name) 

我可以得到的数据却是只有那些在顶部10+。

所以我的问题是,当数据不在页面本身(即从别处导入)时,如何解决这些问题。 预先感谢您的任何意见。

+1

搜索JavaScript呈现,使用Chrome开发人员工具检查请求,或使用硒 – eLRuLL

+0

(1)您尝试打开的URL中有空白。 (2)你试图接收哪些数据? –

+0

感谢您指出这一点,这是网站:http://databank.worldbank.org/data/reports.aspx?source=2&series=NY.GDP.MKTP.CD&country=#否则你可以点击'这里'在题。 – learnandshare

回答

0

通常情况下,当JavaScript加载更多的数据时,它会调用端点。

当您拨打urlopen(data)时,您正在呼叫端点。在使用requests.get(data)requests.post(data)的较新版本的python中也有类似的调用。 urlopen的文档有大量的例子和用法。如果你看看这个请求,javascript会让它有很多部分(头文件,参数,方法等)。您可以在urlopen中将这些部分添加到您的请求中,以便复制(模仿)javascript所调用的调用。

如果您可以模仿该呼叫,那么您会将随后呼叫中的数据加载到您的汤中。然后你可以解析数据。

如果你不能模仿这个电话,那么你最好的选择就是使用某种无头浏览器。最常用的几种是Dryscrape和Selenium。我个人比较喜欢Dryscrape

看看你的问题的意见,我看到你已经在使用硒。与滚动类似,当滚动完成时,通常会进行之前提到的后续调用。如果你可以完整地模仿它们(头文件,params,qwargs等),那么你可以让你的浏览器加载数据。

+0

谢谢。我还没有尝试硒,正在阅读如何使用硒,然后才能开始尝试解决问题。我想问你通过模仿对端点的呼叫意味着什么,是否有任何示例或外行术语来表达它? – learnandshare

+0

我添加了对端点,请求和urlopen的说明。希望有所帮助。 –

+0

现在更清楚了。谢谢。 – learnandshare

2

当我访问链接时,有一个专门用于“下载选项”的完整菜单。为什么不使用它?

+0

我希望我可以但这是我的任务。 – learnandshare

+0

@austin认真的这个最佳答案我甚至在stackoverflow上看到:D –