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的Bottle框架中使用微信API的示例
Apr 23 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
对numpy.append()里的axis的用法详解
Jun 28 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
Python 学习教程之networkx
Apr 15 Python
在Python中COM口的调用方法
Jul 03 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
Jan 17 Python
Python MySQL 日期时间格式化作为参数的操作
Mar 02 Python
Python的logging模块基本用法
Dec 24 Python
Python中X[:,0]和X[:,1]的用法
May 10 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 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
php 函数中使用static的说明
2012/06/01 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
javascript 网页进度条简单实例
2017/02/22 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
python基础 range的用法解析
2019/08/23 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
技术总监个人的自我评价范文
2013/12/18 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
销售内勤岗位职责
2015/02/10 职场文书
求职简历自我评价范文
2015/03/10 职场文书
人事任命书范本
2015/09/21 职场文书