当前位置: 首页 > 知识库问答 >
问题:

从奇怪的仪表板格式中刮取数据

张俊茂
2023-03-14

我正在收集COVID疫苗接种数据,并尝试使用Python从这个站点中删除疫苗编号(第一个--“接受1剂疫苗的人”)。我尝试使用BeautifulSoup提取HTML,然后通过XPath或属性进行搜索。当然,首先,我使用BeautifulSoup解析页面:

rhode_island = BeautifulSoup(requests.get('https://ri-department-of-health-covid-19-data-rihealth.hub.arcgis.com').content, 'html.parser')

但是这个HTML输出看起来与页面上的实际HTML完全不一样--相反,它只是一行又一行的如下内容:

%22%5D%7D%2C%22validationClasses%22%3A%7B%22fieldSuccess%22%3A%5B%22field-success%22%5D%2C%22fieldError%22%3A%5B%22field-error%22%5D%2C%22controlSuccess%22%3A%5B%22control-success%22%5D%2C%

我不是很确定这里发生了什么--我尝试了几种不同的方法(LXML,Beautiful Soup),但两种方法都返回了这个奇怪的结果。结果,我无法刮出我要找的信息,因为它似乎不是真正的HTML,(我试过了,刮失败了)。

有没有人知道我可以做什么来删除这些数据?

共有1个答案

尉迟俊能
2023-03-14

该页面是Javascript版的,需要一个浏览器来正确呈现数据,并且在引擎盖下使用了ArcGIS REST API。

或者用selenium之类的东西在浏览器中加载页面,或者查看他们从何处获取数据--在本例中,似乎是一个covid_public_map_test数据集,您可以查询:

In [1]: import requests

In [2]: session = requests.Session()

In [3]: session.headers = {'Accept': '*/*', 'Content-Type': 'application/x-www-form-urlencoded'}

In [4] response = session.get('https://services1.arcgis.com/dkWT1XL4nglP5MLP/arcgis/rest/services/COVID_Public_Map_TEST/FeatureServer/2/query', params={'f': 'json', 'where': '1=1', 'returnGeometry': 'false', 'outFields': '*'})

In [5]: data = response.json()  

In [5]: data
Out[5]: 
{'objectIdFieldName': 'OBJECTID',
 'uniqueIdField': {'name': 'OBJECTID', 'isSystemMaintained': True},
 'globalIdFieldName': '',
 'fields': [{'name': 'OBJECTID',
   'type': 'esriFieldTypeOID',
   'alias': 'OBJECTID',
...
    'New_Covid_Fatality_Today': 23}},
  {'attributes': {'OBJECTID': 40,
    'City_Town': 'WOONSOCKET',
    'Count_of_COVID_19_Positive': 27,
    'Rate_per_1k': 0.00027,
    'Population_per': 99999,
    'Date': 1586304000000,
    'Covid_case': 77812,
    'Covid_Deaths': 1625,
    'Covid_Positive_Today': 395,
    'Total_Hospitalized': 459,
    'Covid_ICU': 56,
    'Covid_Ventilator': 29,
    'Total_Covid_Lab_Tests': 1817360,
    'Negative_Covid_Lab_Tests': 1723464,
    'New_Covid_Fatality_Today': 23}}]}

您可以通过outstatistics查询参数进行聚合。

或者,更好的是,研究如何使用Python ArcGIS API以更方便的方式完成同样的操作。

 类似资料:
  • 问题内容: 关于正则表达式有一个问题,试图回答我发现了另一个奇怪的事情。 这将打印YY。为什么?? 这会打印YXY 为什么勉强的正则表达式与“ X”字符不匹配?有,但为什么第一次不匹配三个符号和匹配的是两个,然后一个而不是三个?和第二个正则表达式仅匹配s而不匹配? 问题答案: 让我们依次考虑它们: 有两个匹配项: 在字符位置0处被匹配,并被替换为。 在字符位置1,空字符串被匹配,并被添加到输出中。

  • 我一直想把桌子从这里刮下来,但在我看来BeautifulSoup找不到桌子。 我写道: 基于其他类似的问题,我假设HTML在某种程度上被破坏了,但我不是专家…我找不到答案:(Beautiful soup缺少一些html表标签)、(从网站提取表)、(使用Beautiful soup刮表),甚至(Python+Beautiful soup:从网页刮表) 多谢了!

  • 我对python和刮擦是新手,请帮助我如何从这个表中刮擦数据。对于登录,请转到公共登录,然后输入收件人和收件人日期。 数据模型:数据模型具有以下特定顺序和大小写的列:“record_date”、“doc_number”、“doc_type”、“role”、“name”、“apn”、“transfer_amount”、“county”和“state”。“角色”列可以是“授权人”,也可以是“授权人”,

  • 我正在从一个站点上刮取数据,每个项目都有一个相关的文档URL。我想从那个文件中刮数据,这是可用的HTML格式后点击链接。现在,我一直在使用Google Sheets导入feed来填充基本列。 有没有下一步,我可以做的,进入每个相应的URL并从文档中抓取元素,并用它们填充Google表单?我之所以使用RSS提要(而不是python和BS)是因为它们实际上提供了一个RSS提要。 我找过了,没有找到一个

  • 我使用BufferedReader读取了一个txt文件。我将每一行添加到一个长字符串中,并将前面发布的代码应用于此。整个代码如下: 文本文件是一篇我想删除不是字母的所有内容(包括空白空间)的普通文章。摘录如下:“[16]自由软件基金会(FSF)成立于1985年,其本意是”自由“一词指的是发行的自由。”

  • 我在 Android 中面临日期解析的真正问题。我通过 JSON 接收一个日期,日期为 dd/MM/yyyy HH:mm z 格式,我所需要的只是获取“本地化”的小时和分钟并将其显示在我的应用程序中。使用我的代码,每台设备上一切正常,但我的客户报告说,他们在使用索尼XPERIA设备时无法看到应用程序中的时间。他们还告诉我,他们有一个无法显示时间的XPeria设备,然后他们扎根它,一切都开始正常工作