學會了從網格爬取數據,就可以告別從網站一頁一頁復制表格數據的時代了。
說個親身經歷的事:
以前我的本科畢業論文是關於“燃放煙花爆竹和空氣質量”之間關系的,就要從環保局官網查資料。
一個省10個市,720天的數據,我就傻乎乎地,一頁一頁復制數據,然后還要手動清理數據。
幸好可以復制,要不然我都可能手抄,你信不信。
當時別說Python,R都不知道,甚至excel都跛腳。
結果,有同學幫老師做個實驗,論文都快寫好了,我還在處理數據。
也正是因為有了這個經歷,促使了我畢業很多年以后,還想把爬取數據這樣一件事做好。
同時,也希望能給后面學習的人一點啟發。
…………………………………………以上為感慨,下面是正文………………………………………
1 #request網站請求 2 import urllib.request 3 #BeautifulSoup獲取網站源代碼 4 from bs4 import BeautifulSoup 5 import pandas as pd 6 import csv 7 response=urllib.request.urlopen("https://sthjt.ah.gov.cn/public/column/21691?type=4&action=list&nav=&sub=&catId=32710201") 8 #解析源代碼 9 soup = BeautifulSoup(response, "html.parser") 10 links = soup.find("div", {"id": {"xxgk_lmcon"}}) 11 ss =links.find_all("a") 12 for a in ss: 13 link = a.get('href') 14 #read_html可以直接獲取網站表格 15 tb = pd.read_html(link)[2] 16 #mode='a'追加寫入 17 tb.to_csv("C:\\Users\\RK-PC\\Desktop\\Crawldata.csv", mode='a')
為了看的更清楚一點,把我獲取數據的網站截圖搬上來。
F12找元素

點進去一個鏈接

看對應的源代碼,注意到沒有,網站表格基本都是這個結構,tr是表格的行,table row

這里本可以繼續用find函數找標簽,然后輸出
為了使代碼簡潔一點,采用pandas庫的read_html函數,直接讀取表格。
最后,把表格寫入csv文件,注意要表明,mode=‘a’,不覆蓋。
聲明:以上操作僅用於學習和研究。
