如何使用Python从此站点获取所有数据

时间:2017-02-12 16:32:57

标签: python python-3.x web-scraping beautifulsoup

我对网络抓取很新。我想从here获取数据,主要是右边的数据,其中包含国家的年份,国家和国内生产总值。

我的代码如下:

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名以上的数据。

所以我的问题是,如果数据不在页面本身(即从其他地方导入),我该如何处理这类问题。 提前感谢您的任何意见。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

当您致电urlopen(data)时,您正在呼叫端点。使用requests.get(data)requests.post(data)在较新版本的python中进行类似的调用。 urlopen的文档包含大量示例和用法。如果你查看请求,javascript使它有很多部分(标题,参数,方法等)。您可以在urlopen中将这些部分添加到您的请求中,以便复制(模仿)javascript正在进行的调用。

如果您可以模仿该通话,那么您可以将后续通话中的数据加载到您的汤中。然后你可以解析数据。

如果你无法模仿那个电话,那么你最好的选择就是使用某种无头浏览器。一些最常用的是Dryscrape和Selenium。我个人更喜欢Dryscrape

查看有关您问题的评论,我发现您已经在使用selenium。与滚动类似,当滚动完成时,它通常会进行我之前提到的后续调用。如果您可以完整地模仿它们(标题,参数,qwargs等),那么您可以让浏览器加载数据。