python 中的抓取显示 None 值
Scraping in python shows None value
导入请求
从 bs4 导入 BeautifulSoup 作为 bs
导入 csv
r = requests.get('https://portal.karandaaz.com.pk/dataset/total-population/1000')
汤 = bs(r.text)
table = soup.find_all(class_='ag-header-cell-text')
这给了我 None 价值任何想法如何从这个网站抓取数据将不胜感激。
您要搜索的标签不在源代码中,这就是您未返回任何数据的原因。你有什么理由期望它在那里吗?您在浏览器中看到的源代码可能与使用请求库拉取时看到的不同。
您可以通过以下方式查看正在拉取的代码:
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 异步填充。幸运的是,记录浏览器的网络流量会显示对 REST API 的请求,它以 JSON 的形式提供 table 的内容。以下脚本向 API 发出 HTTP GET 请求,给定所需的 "dataset_id"
(您可以根据需要更改 params
字典中的键值对)。然后将响应转储到 CSV 文件中:
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())
导入请求 从 bs4 导入 BeautifulSoup 作为 bs 导入 csv
r = requests.get('https://portal.karandaaz.com.pk/dataset/total-population/1000') 汤 = bs(r.text) table = soup.find_all(class_='ag-header-cell-text')
这给了我 None 价值任何想法如何从这个网站抓取数据将不胜感激。
您要搜索的标签不在源代码中,这就是您未返回任何数据的原因。你有什么理由期望它在那里吗?您在浏览器中看到的源代码可能与使用请求库拉取时看到的不同。
您可以通过以下方式查看正在拉取的代码:
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 异步填充。幸运的是,记录浏览器的网络流量会显示对 REST API 的请求,它以 JSON 的形式提供 table 的内容。以下脚本向 API 发出 HTTP GET 请求,给定所需的 "dataset_id"
(您可以根据需要更改 params
字典中的键值对)。然后将响应转储到 CSV 文件中:
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())