beautifulsoup - 如何嵌入或抓取 Socrata 数据集 API 文档页面中给出的“关于此数据集”部分?
问题描述
此页面链接适用于公共NYC 数据集的 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 API 的 1000 条记录限制(v2.1 具有与以前的版本)并检索整个数据集。
解决方案
我有这个更好的解决方案,它不涉及在所有行上发送 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)
推荐阅读
- pyomo - 如何使用 pyomo 加载 *.sol 文件
- reactjs - 测试 props 是否通过(不使用 Enzyme)
- android - generate signed apk is not working, apk is unsigned
- laravel - Laravel payment multi subscriptions
- javascript - 检查多维数组中的偶数
- vue.js - 使用 vuejs 对 js 数据动态应用搜索过滤器
- python - os.walk 但顶部有目录?
- ibm-cloud - Using context variables to write the user's car registration
- karate - Can I run example in scenario outline for n times?
- modelica - 有没有办法将参数传递给可替换/重新声明的组件?