2024-10-01 07:36:35 发布
网友
导入请求 从bs4导入BeautifulSoup作为bs 导入csv
r=请求。获取('https://portal.karandaaz.com.pk/dataset/total-population/1000') 汤=bs(r.text) table=soup.find_all(class='ag-header-cell-text')
这对我来说毫无价值,如果你知道如何从这个网站上获取数据,我将不胜感激
您正在搜索的标记不在源代码中,这就是您不返回任何数据的原因。你有什么理由期待这一切发生吗?您在浏览器中看到的源代码可能与使用请求库提取源代码时看到的源代码不同
您可以通过以下方式查看正在提取的代码:
import requests from bs4 import BeautifulSoup as bs import csv r = requests.get('https://portal.karandaaz.com.pk/dataset/total-population/1000') soup = bs(r.text, "lxml") print( soup )
BeautifulSoup只能看到在最初请求资源时直接烘焙到该资源HTML中的内容。您试图获取的内容不会烘焙到页面中,因为通常,当您在浏览器中查看此特定页面时,DOM是使用JavaScript异步填充的。幸运的是,记录浏览器的网络流量会显示对RESTAPI的请求,该API将表的内容作为JSON提供。以下脚本向该API发出HTTP GET请求,给定所需的"dataset_id"(您可以根据需要更改paramsdict中的键值对)。然后将响应转储到CSV文件中:
"dataset_id"
params
def main(): import requests import csv url = "https://portal.karandaaz.com.pk/api/table" params = { "dataset_id": "1000" } response = requests.get(url, params=params) response.raise_for_status() content = response.json() filename = "dataset_{}.csv".format(params["dataset_id"]) with open(filename, "w", newline="") as file: fieldnames = content["data"]["columns"] writer = csv.DictWriter(file, fieldnames=fieldnames) writer.writeheader() for row in content["data"]["rows"]: writer.writerow(dict(zip(fieldnames, row))) return 0 if __name__ == "__main__": import sys sys.exit(main())
您正在搜索的标记不在源代码中,这就是您不返回任何数据的原因。你有什么理由期待这一切发生吗?您在浏览器中看到的源代码可能与使用请求库提取源代码时看到的源代码不同
您可以通过以下方式查看正在提取的代码:
BeautifulSoup只能看到在最初请求资源时直接烘焙到该资源HTML中的内容。您试图获取的内容不会烘焙到页面中,因为通常,当您在浏览器中查看此特定页面时,DOM是使用JavaScript异步填充的。幸运的是,记录浏览器的网络流量会显示对RESTAPI的请求,该API将表的内容作为JSON提供。以下脚本向该API发出HTTP GET请求,给定所需的
"dataset_id"
(您可以根据需要更改params
dict中的键值对)。然后将响应转储到CSV文件中:相关问题 更多 >
编程相关推荐