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 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
对python中的xlsxwriter库简单分析
May 04 Python
Python中偏函数用法示例
Jun 07 Python
Python实现计算字符串中出现次数最多的字符示例
Jan 21 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
python统计中文字符数量的两种方法
Jan 31 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 Python
python django生成迁移文件的实例
Aug 31 Python
Python(PyS60)实现简单语音整点报时
Nov 18 Python
Python调用graphviz绘制结构化图形网络示例
Nov 22 Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 Python
python3.8.1+selenium实现登录滑块验证功能
May 22 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
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
javascript学习网址备忘
2007/05/29 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
js通过Date对象实现倒计时动画效果
2017/10/27 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
python中栈的原理及实现方法示例
2019/11/27 Python
方法名是否可以与构造器的名字相同
2012/06/04 面试题
如何判断计算机可能已经中马
2013/03/22 面试题
EJB的基本架构
2016/09/22 面试题
自考自我鉴定范文
2013/10/30 职场文书
会计专业自我评价
2014/02/12 职场文书
《钱学森》听课反思
2014/03/01 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
2015年采购员工作总结
2015/04/27 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
社区服务活动感想
2015/08/11 职场文书