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中List的sort方法指南
Sep 01 Python
Python的randrange()方法使用教程
May 15 Python
python取代netcat过程分析
Feb 10 Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 Python
通过Python编写一个简单登录功能过程解析
Sep 04 Python
python3 实现函数写文件路径的正确方法
Nov 27 Python
基于python使用tibco ems代码实例
Dec 20 Python
python小项目之五子棋游戏
Dec 26 Python
Python PIL库图片灰化处理
Apr 07 Python
python datetime处理时间小结
Apr 16 Python
python爬虫中的url下载器用法详解
Nov 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 mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
php中define用法实例
2015/07/30 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
jqgrid 简单学习笔记
2011/05/03 Javascript
document.getElementById介绍
2011/09/13 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
js操作二进制数据方法
2018/03/03 Javascript
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
ES6知识点整理之对象解构赋值应用示例
2019/04/17 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
介绍Python中的一些高级编程技巧
2015/04/02 Python
详解Python装饰器
2019/03/25 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
Python之修改图片像素值的方法
2019/07/03 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
关于多元线性回归分析——Python&SPSS
2020/02/24 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
三好学生主要事迹材料
2015/11/03 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
muduo TcpServer模块源码分析
2022/04/26 Redis