python 爬虫基本使用——统计杭电oj题目正确率并排序


Posted in Python onOctober 26, 2020

python爬虫主要用两个库:Urllib和BeautifulSoup4。一个用来爬取网页,一个用来解析网页。

Urllib是Python内置的HTTP请求库,它包含四个模块:

1、request,最基本的 HTTP 请求模块,用来模拟发送请求,就像在浏览器里输入网址然后敲击回车一样,只需要给库方法传入 URL 与额外的参数,就可以模拟这个过程。

2、error ,异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作保证程序不会意外终止。

3、parse ,工具模块,提供了许多 URL 处理方法,比如拆分、解析、合并等。

4、robotparser,主要用于识别网站的 robots.txt 文件,判断网站是否可以爬取,用的较少。

这里只用到了最常用的request。

BeautifulSoup4从bs4包中导出,这里主要用的就是它的解析功能。

代码如下,注释写得很清楚了:

#杭电OJ题目AC率排序

import urllib.request as ur
from bs4 import BeautifulSoup 

dic = {} #存:"题号:题名 AC 提交次数 正确率"
for t in range(1,59,1):#1~58页都爬一遍
 print(t)
 url = 'http://acm.hdu.edu.cn/listproblem.php?vol='+str(t) #存网址
 bs = BeautifulSoup(ur.urlopen(url).read(),"html.parser")#获取网址的html并转换为可以python可以使用的结构
 ql0 = str(bs.body.table.contents[11].td.table.contents[1])#网页的DOM解析后可以直接通过"."来寻找子元素,找到题目的列表元素后,将列表中所有题目转换成字符串。(可以输出看看)
 ql = ql0[30:-10].split(";") #字符串中的题目以";"分隔,将它们分开,并存到列表中

 for i in ql: #以下就是格式化处理每个题目,然后存到字典中
  info1 = i.split(',"',1)
  num = info1[0].split(',')[1]
  info2 = info1[1].split('",',1)
  name = info2[0]
  right,submit = info2[1].split(',',1)
  submit = submit[:-1] 
  dic[num] = [name,int(right),int(submit),int(right)/int(submit)]
dic = sorted(dic.items(),key = lambda x: x[1][3]) #每页题目都存入字典后,把字典中的题目通过正确率进行排序,传出列表

with open('Statistics.txt','w',encoding = 'utf-8') as f:#把统计排序好的题目保存到txt中
 for i in dic:
  f.write(str(i)+'\n') 
print("Success!")

以上就是python 爬虫基本使用——统计杭电oj题目正确率并排序的详细内容,更多关于python 爬虫的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python web框架学习笔记
May 03 Python
python读取二进制mnist实例详解
May 31 Python
利用python操作SQLite数据库及文件操作详解
Sep 22 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
python爬虫实例详解
Jun 19 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
Python程序暂停的正常处理方法
Nov 07 Python
python将邻接矩阵输出成图的实现
Nov 21 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
如何基于Python爬取隐秘的角落评论
Jul 02 Python
改变 Python 中线程执行顺序的方法
Sep 24 Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 Python
如何使用Pytorch搭建模型
Oct 26 #Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 #Python
python递归函数用法详解
Oct 26 #Python
Python实现LR1文法的完整实例代码
Oct 25 #Python
Python操作word文档插入图片和表格的实例演示
Oct 25 #Python
python时间time模块处理大全
Oct 25 #Python
使用AJAX和Django获取数据的方法实例
Oct 25 #Python
You might like
php新建文件自动编号的思路与实现
2011/06/27 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
php更新修改excel中的内容实例代码
2014/02/26 PHP
学习php中的正则表达式
2014/08/17 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
js验证表单大全
2006/11/25 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
使用python Django做网页
2013/11/04 Python
Python 修改列表中的元素方法
2018/06/26 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
2014年医学生毕业自我鉴定
2014/03/26 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书