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 相关文章推荐
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 Python
python中enumerate函数遍历元素用法分析
Mar 11 Python
解决Python出现_warn_unsafe_extraction问题的方法
Mar 24 Python
简单谈谈Python中的反转字符串问题
Oct 24 Python
Python实现的递归神经网络简单示例
Aug 11 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
python抓取多种类型的页面方法实例
Nov 20 Python
利用Python实现朋友圈中的九宫格图片效果
Sep 03 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
python超详细实现完整学生成绩管理系统
Mar 17 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中实现进程间通讯
2006/10/09 PHP
PHPMyAdmin 快速配置方法
2009/05/11 PHP
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
php中socket通信机制实例详解
2015/01/03 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
php组合排序简单实现方法
2016/10/15 PHP
Javascript的闭包
2009/12/31 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
2020/01/14 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
进一步了解Python中的XML 工具
2015/04/13 Python
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
Python如何读取、写入CSV数据
2020/07/28 Python
实习自我鉴定范文
2013/10/30 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
消防安全宣传口号
2014/06/10 职场文书
机器人总动员观后感
2015/06/09 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL