# coding:utf-8
import requests
from bs4 import BeautifulSoup
import pandas
# 反扒使用 http://www.user-agent.cn/
ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0'
# 需要抓取的url
url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html'
r = requests.get(url, headers={'User-Agent': ua})
r.encoding = 'utf-8'
# 获取整个页面的内容
html = r.text
soup = BeautifulSoup(html, 'html.parser')
# 定义需要导出的列头,内容
# 列名
columms_str = []
# 排名
ranking_str = []
# 学校名称
school_str = []
# 省份
province_str = []
# 总分
totalscore_str = []
# 获取页面的table
table = soup.find("table", class_='table table-small-font table-bordered table-striped')
# print(table)
# 获取列头
columms = table.thead.tr.find_all("th")
# 取前4列既满足要求
for index in range(0, 4):
# 列名
columms_str.append(columms[index].string)
# 打印列名
print(columms[index].string)
# 获取表格主体中的所有行
trs = table.tbody.find_all("tr", class_='alt')
# print(trs)
for tr in trs:
# 获取每行的所有列
tds = tr.find_all("td")
# 取前4列既满足要求
for index in range(0, 4):
# 存储列的内容
td = ''
if index == 1:
# 获取单元格内容
td = tds[index].div.string
# 学校名称
school_str.append(td)
else:
# 获取单元格内容
td = tds[index].string
if index == 0:
# 排名
ranking_str.append(td)
if index == 2:
# 省份
province_str.append(td)
if index == 3:
# 总分
totalscore_str.append(td)
# 打印每个单元格的内容
print(td)
# 输出到Excel中
# 数据
data = {columms_str[0]: ranking_str, columms_str[1]: school_str, columms_str[2]: province_str, columms_str[3]: totalscore_str}
# 存储路径(可固定路径:D:\\www\\result.xlsx)
filepath = 'result.xlsx'
df = pandas.DataFrame(data)
# 写入excel
df.to_excel(filepath, sheet_name='中国最好大学排名', encoding='utf-8', index=False, header=True)
print('Success')