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里大整数相乘相关技巧指南
Sep 12 Python
Python标准库之itertools库的使用方法
Sep 07 Python
wxpython实现图书管理系统
Mar 12 Python
浅谈python中requests模块导入的问题
May 18 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
python selenium 弹出框处理的实现
Feb 26 Python
Python玩转加密的技巧【推荐】
May 13 Python
Python实现点云投影到平面显示
Jan 18 Python
Python 文件数据读写的具体实现
Jan 24 Python
Python 实现向word(docx)中输出
Feb 13 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 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
Zend的MVC机制使用分析(一)
2013/05/02 PHP
php时间戳转换的示例
2014/03/31 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
通过数据库向Django模型添加字段的示例
2015/07/21 Python
解读python logging模块的使用方法
2018/04/17 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
pycharm新建一个python工程步骤
2019/07/16 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
车间调度岗位职责
2013/11/30 职场文书
幼儿园家长会邀请函
2014/01/15 职场文书
摄影助理岗位职责
2014/02/07 职场文书
会计的岗位职责
2014/03/15 职场文书
学习方法演讲稿
2014/05/10 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
董事长开业致辞
2015/07/29 职场文书
《梅花魂》教学反思
2016/02/18 职场文书
Python一些基本的图像操作和处理总结
2021/06/23 Python