本来想参照: https://mp.weixin.qq.com/s/e7Wd7aEatcLFGgJUDkg-EQ 搞一个往年编程语言动态图的,奈何找不到数据,有数据来源的欢迎在评论区留言。
这里找到了一个,是2020年6月的编程语言排行,供大家看一下: https://www.tiobe.com/tiobe-index/
我们要实现的效果是:
大学排名来源: http://www.zuihaodaxue.com/ARWU2003.html
部分截图:
在http://www.zuihaodaxue.com/ARWU2003.html中的年份可以选择,我们解析的页面就有了:
"http://www.zuihaodaxue.com/ARWU%s.html" % str(year)
初步获取页面的html信息的代码:
def get_one_page(year): try: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36' } url = "http://www.zuihaodaxue.com/ARWU%s.html" % str(year) response=requests.get(url,headers=headers) if response.status_code == 200: return response.content except RequestException: print('爬取失败')
我们在页面上进行检查:
数据是存储在表格中的,这样我们就可以利用pandas获取html中的数据,基本语法:
tb = pd.read_html(url)[num]
其中的num是标识网页中的第几个表格,这里只有一个表格,所以标识为0。初步的解析代码就有了:
def parse_on_page(html,i): tb=pd.read_html(html)[0] return tb
我们还要将爬取下来的数据存储到csv文件中,基本代码如下:
def save_csv(tb): start_time=time.time() tb.to_csv(r'university.csv', mode='a', encoding='utf_8_sig', header=True, index=0) endtime = time.time()-start_time print('程序运行了%.2f秒' %endtime)
最后是一个主函数,别忘了还有需要导入的包:
import requests from requests.exceptions import RequestException import pandas as pd import time def main(year): for i in range(2003,year): html=get_one_page(i) tb=parse_on_page(html,i) #print(tb) save_csv(tb) if __name__ == "__main__": main(2004)
运行之后,我们在同级目录下就可以看到university.csv,部分内容如下: