python爬取大学排名,python成绩排名 排序
导入追溯
从硒导入网驱动程序
由导入者
来自硒。常见进口例外
导入时间
导入xlsxwriter
导入操作系统
上海班级排名:
__SHANGHAIRANKING_ROOT= ./跳跃
indicator_list=[]
更多指示符计数=0
def __init__(self):
自我. driver=webdriver .铬合金()
def __initIndicatorList(self):
self.indicator_list.clear()
屁股=自己.司机。find _ element _ by _ XPath(//*[@ id= content-box ]/div[2]/table/the ad/tr/th[6]/div/div[1]/div[1]/input )
自我.司机。execute _ script( arguments[0]).单击();,对接)
菜单=自己.司机。find _ element _ by _ XPath(//*[@ id= content-box ]/div[2]/table/the ad/tr/th[6]/div/div[1]/div[2]/ul )\。find _ elements _ by _ CSS _ selector(" Li ")
对于菜单中的男:
自我。指标_列表。追加(m . text)
self.more_indicator_cnt=len(菜单)
#初始化工作簿
def __initWorkBook(自身,年份):
如果不是os.path.exists(自身.__SHANGHAIRANKING_ROOT):
os.mkdir(self .__SHANGHAIRANKING_ROOT)
如果os.path.exists(自身.__SHANGHAIRANKING_ROOT):
打印([信息]:文件创建成功)
否则:
打印([错误]:文件创建失败)
出口(1)
self.workBook=xlsxwriter .工作簿(f"{ self ._ _上海排名_ ROOT }/shranking _ { year } .xlsx’)
打印([信息]:工作簿已初始化.)
def __closeWorkBook(self):
self.workBook.close()
打印([信息]:工作簿已关闭.)
#初始表
def __initSheet(self):
如果self.workBook==0或而不是isinstance(self.workBook,xlsxwriter .工作簿):
打印([错误]:首先初始化工作簿)
self.close()
出口(1)
自我。工作表=自身。工作簿。add _ worksheet()
#在表头上签名
self.sheet.write(0,0,排名)
self.sheet.write(0,1,学校名称)
self.sheet.write(0,2,英文名称)
self.sheet.write(0,3,标签)
self.sheet.write(0,4,省市)
self.sheet.write(0,5,类型)
self.sheet.write(0,6,’总分)
对于范围内的我(len(self。指标_列表)):
self.sheet.write(0,7 i,self.indicator_list[i])
打印([信息]:工作表已初始化.)
定义记录(自身,年份):
偏移=1
URL=f https://www。上海排名。cn/rankings/bcur/{ year } 11
自我. driver.get(网址)
时间。睡眠(2)
自我__initIndicatorList()
自我. initWorkBook(年)
自我__initSheet()
虽然正确:
表=自己.司机。find _ element _ by _ XPath(//*[@ id= content-box ]/div[2]/table/tbody )
TRS=桌子。按标签名查找元素( tr )
曲线=偏移
对于拓尔思中的tr:
TDS=tr。按标签名查找元素( TD )
self.sheet.write(curline,0,tds[0]).正文)
self.sheet.write(curline,1,tds[1]).find _ element _ by _ class _ name( name-cn ).正文)
self.sheet.write(curline,2,tds[1]).find _ element _ by _ class _ name( name-en ).正文)
尝试:
tags=tds[1].按类名查找元素(标签)
self.sheet.write(curline,3,tags.text)
除了例外NoSuchElementException:
self.sheet.write(curline,3,)
self.sheet.write(curline,4,tds[2]).正文)
self.sheet.write(curline,5,tds[3]).正文)
self.sheet.write(curline,6,tds[4]).正文)
曲线=曲线一
对于范围内的索引(self.more_indicator_cnt):
曲线=偏移
屁股=自己.司机。find _ element _ by _ XPath(//*[@ id= content-box ]/div[2]/table/the ad/tr/th[6]/div/div[1]/div[1]/input )
自我.司机。execute _ script( arguments[0]).单击();,对接)
菜单=自己.司机。find _ element _ by _ XPath(//*[@ id= content-box ]/div[2]/table/the ad/tr/th[6]/div/div[1]/div[2]/ul )\。find _ elements _ by _ CSS _ selector(" Li ")
自我.司机。execute _ script( arguments[0]).单击();,菜单[索引])
时间。睡眠(0.5)
对于拓尔思中的tr:
self.sheet.write(curline,7 index,tr。find _ elements _ by _ tag _ name( TD )[-1]).正文)
曲线=曲线一
偏移=曲线
尝试:
自我.司机。find _ element _ by _ class _ name(自动分页-禁用。自动分页-下一页’)
打印([处理]: {}完成.。格式(偏移量- 1))
打印(f [信息]:上海{年份}排名完毕.)
自我__closeWorkBook()
返回
除了例外NoSuchElementException:
nextButt=self ._ driver。find _ element _ by _ class _ name( ant-pagination-next )
自我.司机。execute _ script( arguments[0]).单击();,nextButt)
打印([处理]: {}完成.。格式(偏移量- 1))
时间。睡眠(0.5)
除了基本异常作为e:
自我__closeWorkBook()
提高(五)
定义关闭(自己):
自我. driver.close()
if __name__==__main__ :
shr=ShangHaiRanking()
尝试:
#爬取2015年-2022年所有数据
对于在幅度内的我(2015年年、2023年):
shr .录制(一)
除了基本异常作为e:
打印([错误]:崩溃,细节被吹)
print(traceback.format_exc(),end= )
最后:
shr.close()结果如下:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。