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内置函数的用法实例教程
Sep 08 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
django如何通过类视图使用装饰器
Jul 24 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
Jul 31 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
python3连接MySQL8.0的两种方式
Feb 17 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
python基于win32api实现键盘输入
Dec 09 Python
python switch 实现多分支选择功能
Dec 21 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 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
建立动态的WML站点(一)
2006/10/09 PHP
php 获取全局变量的代码
2011/04/21 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
php绘制一条弧线的方法
2015/01/24 PHP
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
PHP 与 js的通信(via ajax,json)
2010/11/16 Javascript
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
Python编程之string相关操作实例详解
2017/07/22 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Python中的Cookie模块如何使用
2020/06/04 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
一套C++笔试题面试题
2012/06/06 面试题
井冈山红色之旅感想
2014/10/07 职场文书
简历自我评价优缺点
2015/03/11 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
详解JS ES6编码规范
2021/05/07 Javascript
Promise面试题详解之控制并发
2021/05/14 面试题
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
python中validators库的使用方法详解
2022/09/23 Python