【问题标题】:Beautiful Soup and extracting a div by IDBeautiful Soup 并通过 ID 提取 div
【发布时间】:2020-09-03 15:20:20
【问题描述】:

我正在尝试从此页面https://coronavirus.gob.mx/datos/ 中提取 COVID-19 的“确认”病例数

这是我的代码行table_div = soup.find('div', {"id": "gsPosDIV"}) 但不起作用,我真的是网络抓取的新手。 提取这些数据的正确形式是什么?

这是html <div id="gsPosDIV" class="h5 mb-0 font-weight-bold text-gray-800">47,144</div

【问题讨论】:

  • 你能贴出html的代码吗?
  • 将您的代码放入 setTimeut 并让它等待几秒钟,同时页面加载
  • 当然是的
    47,144

标签: python web-scraping beautifulsoup


【解决方案1】:

数据通过 JavaScript 动态加载。你可以通过requests模块模拟Javascript请求,然后用re模块解析数据:

import re
import requests

data = {'sPatType': 'Confirmados',
'cve': '000',
'nom': 'Nacional'}

url = 'https://coronavirus.gob.mx/datos/Overview/info/getInfo.php'

raw_data = requests.post(url, data=data).text

positivos = re.search(r'document\.getElementById\("gsPosDIV"\)\.innerHTML = \((\d+)', raw_data).group(1)
print(positivos)

打印:

47144

【讨论】:

  • 谢谢!那么当我们有动态数据时,Beautiful Soup 不是获取数据的最佳方式吗?
  • @MarianaFernandez 在一般情况下不,BeautifulSoup 适合静态数据。但有时返回的动态数据是 HTML 格式,所以 BeautifulSoup 在这种情况下很方便。
  • 谢谢! :D 还有一个问题。为什么网址改变了?我很抱歉这些问题
  • @MarianaFernandez 我在 Firefox 开发者工具的“网络”选项卡中找到了这个 URL(Chrome 也有类似的东西)。主页正在向此 url 发出请求以获取信息。
  • 这是“Hospitalizados”的代码行 document.getElementById("vHos").innerHTML = "39.15 %";我试图根据其他表达式构建正则表达式,这是我的结果: re.search(r'document\.getElementById("vHos")\.innerHTML = \\d+(?:\\.\\ d+)?%', raw_data).group(1) 但不工作,我不知道为什么
猜你喜欢
  • 2011-01-09
  • 2019-09-01
  • 2021-03-11
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 2019-11-14
  • 1970-01-01
相关资源
最近更新 更多