学会了从网格爬取数据,就可以告别从网站一页一页复制表格数据的时代了。
说个亲身经历的事:
以前我的本科毕业论文是关于“燃放烟花爆竹和空气质量”之间关系的,就要从环保局官网查资料。
一个省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’,不覆盖。
声明:以上操作仅用于学习和研究。