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中enumerate()函数编写更Pythonic的循环
Mar 06 Python
Python正则表达式指南 推荐
Oct 09 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
python安装requests库的实例代码
Jun 25 Python
50行Python代码获取高考志愿信息的实现方法
Jul 23 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
Python的bit_length函数来二进制的位数方法
Aug 27 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
PyQt5实现简单的计算器
May 30 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 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 str_pad 函数使用详解
2009/01/13 PHP
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
简单的自定义php模板引擎
2016/08/26 PHP
如何用js控制css中的float的代码
2007/08/16 Javascript
javascript数组使用调用方法汇总
2007/12/08 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
浅析JavaScript动画
2015/06/10 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
详解Python读取yaml文件多层菜单
2019/03/23 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
js实现弹框效果
2021/03/24 Javascript
幼儿教师自我鉴定
2013/11/02 职场文书
业务员岗位职责范本
2013/12/15 职场文书
财政专业求职信范文
2014/02/19 职场文书
2016春节慰问信范文
2015/03/25 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
AngularJS实现多级下拉框
2022/03/25 Javascript