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的ORM框架SQLObject入门实例
Apr 28 Python
python使用wmi模块获取windows下的系统信息 监控系统
Oct 27 Python
Python中操作mysql的pymysql模块详解
Sep 13 Python
使用Python生成XML的方法实例
Mar 21 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
对Python通过pypyodbc访问Access数据库的方法详解
Oct 27 Python
Pandas统计重复的列里面的值方法
Jan 30 Python
手把手教你使用Python创建微信机器人
Apr 29 Python
python pytest进阶之conftest.py详解
Jun 27 Python
tensorflow的计算图总结
Jan 12 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
python中tkinter复选框使用操作
Nov 11 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更新修改excel中的内容实例代码
2014/02/26 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP程序员的技术成长规划
2016/03/25 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
Javascript面向对象编程
2012/03/18 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
Bootstrap基础学习
2015/06/16 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
AngularJS  $on、$emit和$broadcast的使用
2016/09/05 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
维也纳通行证:Vienna PASS
2019/07/18 全球购物
Java如何格式化日期
2012/08/07 面试题
资产评估专业大学生求职信
2013/09/29 职场文书
在求职信中如何凸显个人优势
2013/10/30 职场文书
团日活动策划书
2014/02/01 职场文书
学员自我鉴定
2014/03/19 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
2014会计年终工作总结
2014/12/20 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL