python 爬虫基本使用——统计杭电oj题目正确率并排序
python爬虫主要用两个库:Urllib和BeautifulSoup4。一个用来爬取网页,一个用来解析网页。
Urllib是Python内置的HTTP请求库,它包含四个模块:
1、request,最基本的HTTP请求模块,用来模拟发送请求,就像在浏览器里输入网址然后敲击回车一样,只需要给库方法传入URL与额外的参数,就可以模拟这个过程。
2、error,异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作保证程序不会意外终止。
3、parse,工具模块,提供了许多URL处理方法,比如拆分、解析、合并等。
4、robotparser,主要用于识别网站的robots.txt文件,判断网站是否可以爬取,用的较少。
这里只用到了最常用的request。
BeautifulSoup4从bs4包中导出,这里主要用的就是它的解析功能。
代码如下,注释写得很清楚了:
#杭电OJ题目AC率排序
importurllib.requestasur
frombs4importBeautifulSoup
dic={}#存:"题号:题名AC提交次数正确率"
fortinrange(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(";")#字符串中的题目以";"分隔,将它们分开,并存到列表中
foriinql:#以下就是格式化处理每个题目,然后存到字典中
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=lambdax:x[1][3])#每页题目都存入字典后,把字典中的题目通过正确率进行排序,传出列表
withopen('Statistics.txt','w',encoding='utf-8')asf:#把统计排序好的题目保存到txt中
foriindic:
f.write(str(i)+'\n')
print("Success!")
以上就是python爬虫基本使用——统计杭电oj题目正确率并排序的详细内容,更多关于python爬虫的资料请关注毛票票其它相关文章!
