城市空氣質素 AQI 資料爬蟲

2021-10-10 09:30:30 字數 2873 閱讀 4378

全國各城市(網頁上有的)空氣質素爬蟲,包括城市名稱,aqi等資訊,儲存為.csv檔案格式

**首頁:

首先是獲取城市名稱模組,實質就是從網頁上得到可檢索的所有「城市」字串列表;

import requests

from lxml import etree

import time

from urllib import parse

import pandas as pd

from selenium import webdriver

import urllib.parse

headers =

url = ""

response = requests.get(url, headers=headers)

text = response.content.decode('utf-8')

html = etree.html(text)

city_set = list()

citys = html.xpath("//div[@class='all']/div/ul")

for city in citys:

messages = city.xpath(".//li")

for message in messages:

city_name = message.xpath(".//a/text()")

city_name = "".join(city_name)

# print(city_name)

print(len(city_set))#輸出可爬取的城市數量

print(city_set)#列印所有爬取的城市列表

然後確定所有城市的哪幾年的哪幾個月空氣質素資訊需要爬取;

def get_month_set():

month_set = list()

for i in range(1, 10):

for i in range(10, 13):

return month_set # 一頁能看到乙個月的資料,所以迴圈以月為單位即可

month_set = get_month_set()

month_set.reverse()

最後是資料爬取模組,目的從確定的城市和確定的年月中爬取資料;

driver = webdriver.phantomjs(r'e:\phantomjs-2.1.1-windows\bin\phantomjs.exe')

base_url = 'daydata.php?city='

file_name = 'aqi_2018.csv'

fp = open(file_name, 'w', encoding='utf-8-sig')

fp.write('%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n'%('city','date','aqi','grade','pm25','pm10','so2','co','no2','o3_8h'))#表頭

for ct in range(0, len(city_set)):

for i in range(len(month_set)):

str_month = month_set[i]

weburl = ('%s%s&month=%s' % (base_url, parse.quote(city_set[ct]), str_month))

driver.get(weburl)

time.sleep(1)

dfs = pd.read_html(driver.page_source,header=0)[0]

time.sleep(1) # 防止頁面一帶而過,爬不到內容

if len(dfs) != 0:

for j in range(0,len(dfs)):

date = dfs.iloc[j,0]

aqi = dfs.iloc[j,1]

grade = dfs.iloc[j,2]

pm25 = dfs.iloc[j,3]

pm10 = dfs.iloc[j,4]

so2 = dfs.iloc[j,5]

co = dfs.iloc[j,6]

no2 = dfs.iloc[j,7]

o3 = dfs.iloc[j,8]

fp.write(('%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n' % (city_set[ct],date,aqi,grade,pm25,pm10,so2,co,no2,o3)))

print('yes---%s,%s---done' % (city_set[ct], str_month))

localtime = time.asctime(time.localtime(time.time()))

print("time :", localtime)

else:

print('%s,%s--error' % (city_set[ct], str_month))

localtime = time.asctime(time.localtime(time.time()))

print("time :", localtime)

fp.close()

driver.quit()

print("已完成,謝謝!")

三部分模組連在一起即是完整的爬取全國城市空氣質素的code;

大部分**是修改別人的,我在此基礎上做了些優化,增加了功能,相關資訊顯示的會更加完善;

遇到疑似反爬蟲的情況(run到一半就不動了),建議更換網路。

參考: # 網頁城市列表獲取

#將城市迴圈,獲取aqi

#網路爬蟲&獲取aqi主體部分

python空氣質素等級判斷 空氣質素等級的判定

問 空氣汙染指數分為 個,最佳的空氣質素是什麼水平?答 的原則來確定空氣汙染指數 空氣質素的好壞取決於各種汙染物的汙染程度最有 害的汙染物。空氣汙染指數是根據環境空氣質素標準,對人類健康和生態環境的 各種汙染物,以確定汙染指數的劃分及汙染物濃度的相應限制。目前,中國的空 氣質量指數中使用的分類標準是...

說說空氣質素

今天上網的時候看了很多關於北京空氣問題的新聞,也許是忽然有機會去北京了,多少開始關注起來,雖然offer還沒到,但還是不時的遐想一下。北京的空氣質素已經告急了,這忽然讓我後怕起來,如果真呆個半年,會不會烙下一些病呢?我原本就不喜歡空氣差的地方,這次決定去北京也僅僅因為想去見見世面。還有乙個原因是北京...

爬取多城市空氣質素資料

url import requests from bs4 import beautifulsoup import pandas as pdheaders headers為了防止 防爬蟲,偽裝成瀏覽器訪問 responses requests.get url,headers headers print...