此页面链接适用于公开的NYC dataset的Socrata API文档页面:
在页面的右上方,有一个colophon / cartouche,其中列出了有关数据集的一些信息: "About This Dataset"
它的最后一行启用“嵌入的论文文档”所需代码的副本。 我试过了它可以工作,但是整个页面都是嵌入式的。
每次访问数据集时,我都希望嵌入该对话框,以便在报告中显示此信息。
我知道此信息在html树中的位置:
<body class="dev foundry 200" ...>
...
<div class="container-fluid content">
...
<div id="foundry-docs">
...
<div class="pull-right sidebar metadata">
<div class="panel panel-info about">
...
< div class="panel-body">
<ul>
<li>...</li> ==> items (9) needed
因此,我尝试使用beautifulsoup抓取该信息:
from bs4 import BeautifulSoup
import requests
data_api_page = 'https://dev.socrata.com/foundry/data.cityofnewyork.us/qiz3-axqb'
page = requests.get( data_api_page )
print(page.status_code)
print(page.headers['content-type'])
soup = BeautifulSoup(page.text, 'html.parser')
all_divs = soup.find(name='div', attrs={'class':'panel panel-info about'})
for tag in all_divs.children:
print(tag)
什么也不返回(即使使用find_all):我在做什么错了?
感谢您的帮助!
PS:除了使用此信息注释报告之外,另一个原因是我想在访问数据集之前检索数据集行数 以便绕过Socrata的1000条记录限制API(v2.1与以前的版本具有相同的限制)并检索整个数据集。
答案 0 :(得分:0)
以下几点可能有用,并且不包括抓取。有一个metadata API end-point,您可以在其中检索许多数据描述。这是该NYC数据的元数据终结点:http://data.cityofnewyork.us/api/views/metadata/v1/qiz3-axqb
。
不幸的是,元数据API不包括行数。为此,组装仅返回计数的SoQL查询可能更简单,例如:https://data.cityofnewyork.us/resource/qiz3-axqb.json?$select=count(date)
答案 1 :(得分:0)
是的,汤姆:元数据API包含大量信息,除了行数...
这是我通过经过身份验证的客户端检索整个数据集的方式:
o2
有一天,我将弄清楚如何从DATAPAGE ='https://data.cityofnewyork.us/Public-Safety/NYPD-Motor-Vehicle-Collisions/h9gi-nx95'...的摘要数据中抓取行数。
答案 2 :(得分:0)
我有一个更好的解决方案,它不涉及在所有行上发送SQL计数:
def get_rows_from_metadata(metadata):
rows = -1 #something went wrong if output
for c in metadata['columns']:
if c['name'] == 'UNIQUE KEY':
try:
rows = int(c['cachedContents']['not_null'])
except:
rows = 0
break
return rows
dataset_rows = get_rows_from_metadata(metadata)