加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

50行Python代码获取高考志愿信息,再也不用百度啦

发布时间:2019-07-23 16:16:19 所属栏目:移动互联 来源:乐百川
导读:最近碰着个使命,必要将高考志愿信息生涯成Excel表格,BOSS丢给我一个网址表格之后就让我本身干了。固然我早年也进修过Python编写爬虫的常识,不外时刻长了忘了,于是探索了一天之后终于完成了使命。不得不说,Python干这个照旧挺轻易的,最后写完一看代码
副问题[/!--empirenews.page--]

最近碰着个使命,必要将高考志愿信息生涯成Excel表格,BOSS丢给我一个网址表格之后就让我本身干了。固然我早年也进修过Python编写爬虫的常识,不外时刻长了忘了,于是探索了一天之后终于完成了使命。不得不说,Python干这个照旧挺轻易的,最后写完一看代码,只用了50行就完成了使命。

50行Python代码获取高考志愿信息,再也不消百度啦

筹备事变

起首明晰一下使命。起首我们要从网址表格中读取到一大串网址,然后会见每个网址,获取到页面上的学校信息,然后将它们在写到另一个Excel中。显然,我们必要一个爬虫库和一个Excel库来辅佐我们完成使命。

第一步天然是安装它们,requests-html是一个很是好用的HTML理会库,拿来做简朴的爬虫很是优雅;而openpyxl是一个Excel表格库,可以轻松建设和处理赏罚Excel数据。

  1. pip install requests-html openpyxl 

然后就是网址表格,或许长这样,总共或许一千七百多条数据。个中有少量网址是错误的,会见会获得404错误,以是在编写代码的时辰还要留意错误处理赏罚。

50行Python代码获取高考志愿信息,再也不消百度啦

使命说明

使命的焦点天然就是说明和获取网页内容了。起首此刻赏识器内里打开一个网址,看看网页上的内容是什么。

50行Python代码获取高考志愿信息,再也不消百度啦

可以看到这个网页名目很乱,学校名字什么的都是混在一路的,一点也不规整,这给我们提取数据造成了不少的贫困。不外细心说明之后,着实题目也并不难。

起主要提取的是学校名字,可以看到学校名字和其他笔墨混在一路,譬喻"本科一批平凡文科627集美大学报考环境"。原来我筹备用正则表达式提取,然后发明用正则表达式仿佛很难。之后我多会见了几个网页,发明学校代码根基上都是数字,假若有字母的话也呈现到第一位,以是我回收了以下的算法,起首将字符串从数字处脱离,右边的一个部门就包括了学校名字和“报考环境”几个字,然后删除“报考环境”即可获得学校名字。这个算法独一的弱点就是,若是呈现了字母在中间的代号,就没步伐获取到学校名字了,不外现实运行之后,我荣幸的发明并没有呈现这种环境。

之后要提取的就是专业信息了,在网页源代码中这部门行使tr和td标签来泛起的。一开始我用的是tr加上选择器来提取,可是这个网页天生的时辰很有题目,每个tr标签的样式居然还按照内容的几多而差异,导致我写死的选择器没法美满获取全部行。不外其后我发明整个网页内容都是一个表格, 撤除表头和末了的几个牢靠行之外,剩下的刚好就是要提取的数据行,以是直接获取tr标签,然后切片撤除收尾即可。

50行Python代码获取高考志愿信息,再也不消百度啦

网页根基上说明完了,下面就是编写代码了。

编写代码

总共50行阁下代码,我添加了注释,信托各人应该很轻易就可以看懂。

第一部门代码是从网址表格读取全部url,一开始编写的时辰,表格里的url是从另一个公式天生的,以是必要在加载的时辰添加data_only=True才气读取到公式的功效,不然只能读取到公式自己。

第二部门是建设输出文件,然后编写表头。顺带为了调试利便,我让它假如检测到已经存在方针文件的话就删掉,在成立一个新的。

第三部门就是代码的焦点了。Python代码看着也许有点稀疏,不外比较上面的说明,我想各人应该很轻易看懂。必要留意生涯文件在最后,若是半路代码呈现非常,整个就白干了,而一千七百多条网址不行能担保都正常运行。因为输格外式是“学校名+专业信息”这样的名目,以是我获取学校名之后,还要将学校插入到每行专业信息之前。以是我这里索性直接用try-except包起来,假如堕落的话只打印一下堕落的网址。

  1. import os 
  2. from requests_html import HTMLSession 
  3. from openpyxl import Workbook, load_workbook 
  4. # 从网址表格获取urls 
  5. def get_urls(): 
  6.  input_file = 'source.xlsx' 
  7.  wb = load_workbook(input_file, data_only=True) 
  8.  ws = wb.active 
  9.  urls = [row[0] for row in ws.values] 
  10.  wb.close() 
  11.  return urls 
  12. # 输出Excel文件,假如已存在则删除已有的 
  13. out_file = 'data.xlsx' 
  14. if os.path.exists(out_file): 
  15.  os.remove(out_file) 
  16. wb = Workbook() 
  17. ws = wb.active  
  18. # 编写第一行表头 
  19. ws['a1'] = '学校' 
  20. ws['b1'] = '专业代号' 
  21. ws['c1'] = '专业名称' 
  22. ws['d1'] = '打算数' 
  23. ws['e1'] = '估量1:1登科最低分(投档分)' 
  24. ws['f1'] = '按院校投档比例投档线上已报人数' 
  25. ws['g1'] = '学费' 
  26. ws['h1'] = '办学所在' 
  27. ws['i1'] = '专业备注'  
  28. # 提倡收集哀求,理会网页信息,并写入文件 
  29. session = HTMLSession() 
  30. urls = get_urls() 
  31. for url in urls: 
  32.  import re 
  33.  page = session.get(url) 
  34.  page.html.encoding = 'gb2312' 
  35.  try: 
  36.  college_info = page.html.xpath('//td[@class="report1_1_1"]/text()', first=True) 
  37.  college = re.split('d+', college_info)[1].replace('报考环境', '') 
  38.  rows = page.html.xpath('//tr')[3:-2] 
  39.  for r in rows: 
  40.  info = [x.text for x in r.xpath('//td')] 
  41.  info.insert(0, college) 
  42.  ws.append(info) 
  43.  print(info) 
  44.  except: 
  45.  print(url) 
  46.  
  47. # 生涯文件 
  48. wb.save(out_file) 

运行功效

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读