全國各城市(網頁上有的)空氣質素爬蟲,包括城市名稱,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...