日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

学习随笔-python动态爬取空气质量网数据的实现

發(fā)布時(shí)間:2023/12/29 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习随笔-python动态爬取空气质量网数据的实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

想爬取https://www.aqistudy.cn/空氣質(zhì)量網(wǎng)上的河北省空氣歷史數(shù)據(jù),

?

?

之前使用python寫(xiě)過(guò)基于scrapy的爬蟲(chóng),想故技重施發(fā)現(xiàn)爬取不到想要的數(shù)據(jù),仔細(xì)看過(guò)網(wǎng)頁(yè)源代碼后發(fā)現(xiàn)表格中的數(shù)據(jù)是動(dòng)態(tài)加載的,使用開(kāi)發(fā)者工具想要查看傳輸?shù)臄?shù)據(jù)結(jié)果

發(fā)現(xiàn)數(shù)據(jù)被加密了,百度過(guò)解決辦法后決定選擇selenium實(shí)現(xiàn)動(dòng)態(tài)的數(shù)據(jù)爬取

一、什么是selenium?

selenium 是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶(hù)在操作一樣,selenium用于爬蟲(chóng),主要是用來(lái)解決javascript渲染的問(wèn)題

二、selenium基本實(shí)現(xiàn)

?

1.聲明瀏覽器對(duì)象

browser=webdriver.Chrome('C:\ProgramFiles(x86)\Google\Chrome\Application\chromedriver.exe') 在這里需要安裝相應(yīng)的webdriver需要注意兩點(diǎn) (1)是下載時(shí)注意瀏覽器版本和webdriver的版本號(hào)對(duì)應(yīng) (2)網(wǎng)上關(guān)于webdriver安裝都要求配置環(huán)境變量,本人經(jīng)實(shí)驗(yàn)發(fā)現(xiàn)程序還是會(huì)報(bào)找不到path,因此我直接將webdriver放在chrome路徑下,而后在聲明時(shí)直接貼上路徑

2.訪問(wèn)頁(yè)面 browser.get("http://www.baidu.com") 在這里我觀察了空氣質(zhì)量網(wǎng)的url,發(fā)現(xiàn)格式為 https://www.aqistudy.cn/historydata/daydata.php?city=城市名&month=年月 3.查找元素與selenium操作 這里selenium提供了很多函數(shù)讓我們進(jìn)行操作,其中很關(guān)鍵的兩個(gè)就是通過(guò)xpath查找元素find_elements_by_xpath以及JavaScript的執(zhí)行命令execute_script,而我就很厲害了,pands中有一個(gè)函數(shù)叫做read_html pd.read_html(browser.page_source, header=0)[0] 通過(guò)它的實(shí)現(xiàn)我直接獲得頁(yè)面中表格的dataframe格式,怎么處理當(dāng)然就是任我揉捏了 3.關(guān)閉browser browser.close() ?

在執(zhí)行過(guò)程中,出現(xiàn)了爬取結(jié)果為空的情況,判斷原因?yàn)轫?yè)面未加載完成,設(shè)置time.sleep(1)發(fā)現(xiàn)并不能解決問(wèn)題,在使用八爪魚(yú)采集器采集過(guò)程中,發(fā)現(xiàn)八爪魚(yú)對(duì)未采集到的界面的處理是重復(fù)采集,因此在采集字段后接了一條判斷語(yǔ)句,若結(jié)果為空,則重復(fù)采集

詳見(jiàn)代碼

1 #coding=utf-8 2 from selenium import webdriver 3 import cx_Oracle #引用模塊cx_Oracle 4 import pandas as pd 5 import os 6 #若數(shù)據(jù)為空,則重復(fù)采集 7 def paqu(uurl): 8 browser.get(uurl) 9 dfs = pd.read_html(browser.page_source, header=0)[0] 10 if len(dfs)>1: 11 return dfs 12 else: 13 return paqu(uurl) 14 os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' #防止oracle數(shù)據(jù)亂碼 15 conn=cx_Oracle.connect('Xho', 'sys', 'localhost:1521/orcl') #連接數(shù)據(jù)庫(kù) 16 cursor=conn.cursor()#獲取cursor游標(biāo) 17 18 #聲明瀏覽器對(duì)象 19 browser = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe') 20 base_url='https://www.aqistudy.cn/historydata/daydata.php?city=' 21 city=['石家莊','保定','唐山','邯鄲','邢臺(tái)','滄州','衡水','廊坊','承德','秦皇島','張家口'] 22 23 year=[201301,201401,201501,201601,201701,201801] 24 list_data=[] 25 list_row=[] 26 for p in range(len(city)): 27 for i in year: 28 for j in range(12): 29 num = i + j 30 if num > 201311 and num < 201809: 31 uurl=base_url+city[p]+'&month='+str(num) 32 dfs=paqu(uurl) 33 #time.sleep(1) 34 dfs['city']=city[p] 35 for s in range(0, len(dfs)): 36 date = dfs.iloc[s, 0] 37 list_row.append(date) 38 aqi = dfs.iloc[s, 1] 39 list_row.append(aqi) 40 grade = dfs.iloc[s, 2] 41 list_row.append(grade) 42 pm25 = dfs.iloc[s, 3] 43 list_row.append(pm25) 44 pm10 = dfs.iloc[s, 4] 45 list_row.append(pm10) 46 so2 = dfs.iloc[s, 5] 47 list_row.append(so2) 48 co = dfs.iloc[s, 6] 49 list_row.append(co) 50 no2 = dfs.iloc[s, 7] 51 list_row.append(no2) 52 o3 = dfs.iloc[s, 8] 53 list_row.append(o3) 54 chsh=dfs.iloc[s,9] 55 list_row.append(chsh) 56 57 list_data.append(list_row) 58 list_row=[] 59 for n in range(len(list_data)): 60 sql = 'insert into AIR_ZL (A_DATE,AQI,GRADE,PM25,PM10,SO2,CO,NO2,O3_8H,CITY) VALUES (:A_DATE,:AQI,:GRADE,:PM25,:PM10,:SO2,:CO,:NO2,:O3_8H,:CITY)' 61 x = cursor.execute(sql, (list_data[n][0], float(list_data[n][1]), list_data[n][2],float(list_data[n][3]),float(list_data[n][4]),float(list_data[n][5]),float(list_data[n][6]),float(list_data[n][7]),float(list_data[n][8]),list_data[n][9])) 62 conn.commit(); 63 list_data=[] 64 cursor.close() # 關(guān)閉cursor 65 conn.close() # 關(guān)閉連接 66 browser.close()

?

轉(zhuǎn)載于:https://www.cnblogs.com/ToDoNow/p/9475067.html

總結(jié)

以上是生活随笔為你收集整理的学习随笔-python动态爬取空气质量网数据的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。