【问题标题】:How to scrape all data from this site using Python如何使用 Python 从该站点抓取所有数据
【发布时间】:2017-02-12 16:32:56
【问题描述】:

我对网络抓取很陌生。我想从here中抓取数据,主要是右边的数据,有国家的年份、国家和GDP。

我的代码如下:

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

所以我的问题是,当数据不在页面本身上时(即它是从其他地方导入的),我该如何解决此类问题。 提前感谢您的任何意见。

【问题讨论】:

  • 搜索javascript渲染,用chrome开发者工具检查请求,或者使用selenium
  • (1) 您尝试打开的 URL 中有一个空白。 (2) 您试图接收什么数据?
  • 感谢您指出,这是网站:databank.worldbank.org/data/… 否则您可以点击问题中的“此处”。
  • 使用 Selenium:将该表滚动到底部几次,然后将生成的 html 提取到 bs4
  • 滚动它没有帮助,它仍然打印出 'loading' 超过 10 个。

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


【解决方案1】:

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

【讨论】:

  • 我希望我能,但这是我的任务。
【解决方案2】:

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

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

如果您可以模仿该调用,那么您可以将来自后续调用的数据加载到您的汤中。然后就可以解析数据了。

如果您无法模仿该调用,那么您最好的选择是使用某种无头浏览器。最常用的几个是 Dryscrape 和 Selenium。我个人更喜欢Dryscrape

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多