时间:2021-05-23
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 urfrom 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 爬虫的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python排序搜索基本算法之归并排序。分享给大家供大家参考,具体如下:归并排序最令人兴奋的特点是:不论输入是什么样的,它对N个元素的序列排序所用
本文实例讲述了Python实现堆排序的方法。分享给大家供大家参考,具体如下:堆排序作是基本排序方法的一种,类似于合并排序而不像插入排序,它的运行时间为O(nlo
快速排序算法介绍快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排
本文实例讲述了PHP排序算法之归并排序(MergingSort)。分享给大家供大家参考,具体如下:基本思想:归并排序:就是利用归并(合并)的思想实现的排序方法。
C语言数据结构链表与归并排序实例详解归并排序适合于对链表进行原址排序,即只改变指针的连接方式,不交换链表结点的内容。归并排序的基本思想是分治法:先把一个链表分割