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实现字符串逆序输出功能示例
Jun 24 Python
Python将图片转换为字符画的方法
Jun 16 Python
Python装饰器原理与简单用法实例分析
Apr 29 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
Python标准库shutil用法实例详解
Aug 13 Python
Python实现Event回调机制的方法
Feb 13 Python
详解python 模拟豆瓣登录(豆瓣6.0)
Apr 18 Python
python障碍式期权定价公式
Jul 19 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
Python实现封装打包自己写的代码,被python import
Jul 12 Python
python logging模块的使用详解
Oct 23 Python
Python如何把不同类型数据的json序列化
Apr 30 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基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
php 无极分类(递归)实现代码
2010/01/05 PHP
Memcache 在PHP中的使用技巧
2010/02/08 PHP
迁移PHP版本到PHP7
2015/02/06 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
在JS数组特定索引处指定位置插入元素的技巧
2014/08/24 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
Python splitlines使用技巧
2008/09/06 Python
Python3实现生成随机密码的方法
2014/08/23 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
深入理解Django的自定义过滤器
2017/10/17 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
什么是数据抽象
2016/11/26 面试题
单位成立周年感言
2014/01/26 职场文书
2014年廉洁自律承诺书
2014/05/26 职场文书
竞赛口号大全
2014/06/16 职场文书