python - 我的代码返回一个空列表我该如何解决?
问题描述
我尝试使用 beautifulsoup 模块从网站获取数据,但它返回空列表,但我不想使用 selenium,这可能吗?我只想使用 beautifulsoup 模块。我正在使用 MacOS。
我的代码是:
import requests
from bs4 import BeautifulSoup
r = requests.get("https://data.ibb.gov.tr/dataset/saatlik-trafik-yogunluk-veri-seti/resource/93f996f1-70da-4500-951a-693c7e7066f6/view/9a2a6a74-c7f5-4e2d-96d5-21a57ef7a889")
soup = BeautifulSoup(r.content,"html")
result = soup.find_all("div", attrs={"class":"recline-slickgrid slickgrid_284950 ui-widget"})
print(result)
解决方案
你很幸运。访问此特定页面时,您的浏览器向 REST API 发出 HTTP POST 请求,该 API 返回包含表中实际数据的 JSON。通常,这些数据随后用于使用 JavaScript 异步填充 DOM。如果您模仿该请求,则无需使用Selenium
,或其他一些无头浏览器。你甚至不需要BeautifulSoup
,只是requests
。
def main():
import requests
url = "https://data.ibb.gov.tr/api/3/action/datastore_search"
data = {
"resource_id": "93f996f1-70da-4500-951a-693c7e7066f6",
"filters": {},
"limit": 10,
"offset": 0
}
response = requests.post(url, data=data)
response.raise_for_status()
for record in response.json()["result"]["records"]:
print(f"Latitude: {record['LATITUDE']}, Longitude: {record['LONGITUDE']}")
return 0
if __name__ == "__main__":
import sys
sys.exit(main())
输出:
Latitude: 41.0202026367188, Longitude: 28.9105224609375
Latitude: 41.0531616210938, Longitude: 28.6248779296875
Latitude: 41.1849975585938, Longitude: 28.8226318359375
Latitude: 41.0476684570312, Longitude: 28.8665771484375
Latitude: 41.0476684570312, Longitude: 29.1522216796875
Latitude: 40.8828735351562, Longitude: 29.3170166015625
Latitude: 41.1520385742188, Longitude: 28.7896728515625
Latitude: 40.8828735351562, Longitude: 29.3719482421875
Latitude: 40.9927368164062, Longitude: 28.9215087890625
Latitude: 41.0806274414062, Longitude: 28.9215087890625
>>>
在这段代码中,每一个record
对应一个字典,字典中有各种键值对。除了经纬度之外,表格中的其他列都是可用的,例如平均速度、日期和时间等。
您可以将有效负载字典"limit": 10
中的键值对更改为data
您想要的任何值。在这种情况下,我只想要前十个条目。
但是,一般来说,如果您尝试从使用 JavaScript 异步填充的页面中抓取信息,并且它不公开简单的 REST API,那么BeautifulSoup
也requests
不会帮助您。在这种情况下,您将需要一个无头浏览器Selenium
或Playwright
模拟完整的浏览会话。
推荐阅读
- javascript - Uint8Array 对象 - 合并时错位
- docker - 发生套接字错误:ZooKeeper 的 Docker 上的 zoo1/172.28.0.2:2181
- php - PHP ftp_login 警告“您将在 10 分钟不活动后断开连接”
- java - 如何在 java 或 mulesoft 中构建 https url
- javascript - 命名所有变量时出现“缺少变量名”错误
- javascript - 从另一个端点检索时,使用 express-session 保存到 req.session 的数据为空
- arrays - PThread 的分布式计算不工作
- html - 如何在里面添加链接
- 让李和李悬停?
- javascript - 尝试为数组添加搜索逻辑时出现角度打字稿 ts(7053) 错误
- python - 如何在python中使用beautifulsoup(或其他)从rvest(来自R)模拟html_nodes