写在前面
使用python对【软科-高等教育评价领先品牌 https://www.shanghairanking.cn/rankings/bcur/2020】进行爬取,然后存到sql数据库中(也有excel的代码),并且进行分析,获得每个省份的大学的种类的分布图。
这个项目特别有纪念意义,因为它让我深刻认识了SQL数据库语句的魅力还有matplotlib的重要性,另外还有Echarts的强大,还有如何通过修改官方实例得到自己想要的结果,还有urllib 爬虫与BeautifulSoup 网页解析。是一个很全面的锻炼。很多的注释没有删掉,是自己编敲边试的结果。
爬虫与数据存储(excel&sql)
import bs4
from bs4 import BeautifulSoup #网页解析,获取数据
import urllib #订制url,获取网页数据
import urllib.error #请求网页如果出错的时候的分析
import urllib.request #请求网页获取
import re
import os
import requests
import time
import numpy as np
import xlwt
import sqlite3
def main():
#1.爬取网页
baseurl = "https://www.shanghairanking.cn/rankings/bcur/2020"
print(baseurl)
# ask_URL(baseurl) #自建函数,获取网页并存储为本地文本
#2.分析数据,解析数据(边爬取边解析,逐一解析,循环语句)
get_data(baseurl) #自建函数,获取网页的本地文本里面的有用的表单
#得到指定某一个url的网页的内容,这是最基础的函数
def ask_URL(url):
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"}
request = urllib.request.Request(url, headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
print(html)
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e, code)
if hasattr(e, "reason"):
print(e, reason)
print("访问成功")
return html #最后返回,网页文本
def get_data(baseurl):
data_list = []
# html = ask_URL(baseurl)
html = open(r'./大学.html',"rb")
# print(html)
soup = BeautifulSoup(html, "html.parser")
# print(soup)
for item in soup.select('tr > td'):
rx = item.get_text()
re = rx.replace("\r\n", "")
data_list.append(re.strip())
print(data_list)
print(len(data_list))
print(data_list[0:6])
print(data_list[0:6])
ranking0 = []
uname1 = []
city2 = []
info3 = []
totalscore4=[]
partscore5=[]
ranking0.extend(data_list[0:-5: