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中的魔法方法深入理解
Jul 09 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
Dec 14 Python
python绘制双柱形图代码实例
Dec 14 Python
Python实现感知器模型、两层神经网络
Dec 19 Python
python实现excel读写数据
Mar 02 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
python实现机器学习之元线性回归
Sep 06 Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 Python
python数值基础知识浅析
Nov 19 Python
Python 输出详细的异常信息(traceback)方式
Apr 08 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
基于Python制作一副扑克牌过程详解
Oct 19 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
论坛头像随机变换代码
2006/10/09 PHP
PHP下常用正则表达式整理
2010/10/26 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
PHP-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
Ext grid 添加右击菜单
2009/11/26 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
python文件和目录操作方法大全(含实例)
2014/03/12 Python
极简的Python入门指引
2015/04/01 Python
Python中super关键字用法实例分析
2015/05/28 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
一文了解Python并发编程的工程实现方法
2019/05/31 Python
django 环境变量配置过程详解
2019/08/06 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
策划主管的工作职责
2013/11/24 职场文书
银行实习鉴定
2013/12/13 职场文书
销售队伍口号
2014/06/11 职场文书
廉政承诺书
2015/01/19 职场文书
聘任书范文大全
2015/09/21 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs