python 爬虫基本玩法,统计杭电oj题目正确率并排序

4522编辑收藏

  python爬虫主要用两个库:UrllibBeautifulSoup4。一个用来爬取网页,一个用来解析网页。

  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!")
复制代码

  参考文档:

  Urllib

  BeautifulSoup4 

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
很高兴能帮到你~
点赞
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示