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正则表达式抓取成语网站
Nov 20 Python
python安装以及IDE的配置教程
Apr 29 Python
Selenium定位元素操作示例
Aug 10 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
Python二叉搜索树与双向链表转换算法示例
Mar 02 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
Pytorch转onnx、torchscript方式
May 25 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
Python绘图之二维图与三维图详解
Aug 04 Python
python文件排序的方法总结
Sep 13 Python
Pytorch 实现变量类型转换
May 17 Python
python 中yaml文件用法大全
Jul 04 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数组应该有多大的分析
2009/07/30 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
js array数组对象操作方法汇总
2019/03/18 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
countup.js实现数字动态叠加效果
2019/10/17 Javascript
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
Python单元测试框架unittest简明使用实例
2015/04/13 Python
Python读写文件方法总结
2015/06/09 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
python爬取淘宝商品销量信息
2018/11/16 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
python带参数打包exe及调用方式
2019/12/21 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
2014新课程改革心得体会
2014/03/10 职场文书
亮化工程实施方案
2014/03/17 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL
java实现web实时消息推送的七种方案
2022/07/23 Java/Android
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android