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获取网页上图片下载地址的方法
Mar 11 Python
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
Python之批量创建文件的实例讲解
May 10 Python
Python使用一行代码获取上个月是几月
Aug 30 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
Django文件存储 默认存储系统解析
Aug 02 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
pytorch判断是否cuda 判断变量类型方式
Jun 23 Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 Python
python实现学生信息管理系统(面向对象)
Jun 05 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 at(@)符号的用法简介
2009/07/11 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
2015/02/02 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
Eclipse + Python 的安装与配置流程
2013/03/05 Python
python生成指定长度的随机数密码
2014/01/23 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
python中map的基本用法示例
2018/09/10 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
《灰椋鸟》教学反思
2014/04/27 职场文书
初一军训感言
2015/08/01 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
零基础学java之循环语句的使用
2022/04/10 Java/Android
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript