zoukankan      html  css  js  c++  java
  • python 爬虫基本玩法,统计杭电oj题目正确率并排序

      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)+'
    ') 
    print("Success!")

      参考文档:

      Urllib

      BeautifulSoup4 

  • 相关阅读:
    permission 文档 翻译 运行时权限
    TabLayout ViewPager Fragment 简介 案例 MD
    Log 日志工具类 保存到文件 MD
    OkHttp 官方wiki 翻译 MD
    Okhttp 简介 示例 MD
    OkHttp 官方Wiki之【使用案例】
    DialogPlus
    倒计时 总结 Timer Handler CountDownTimer RxJava MD
    RecyclerView 判断滑到底部 顶部 预加载 更多 分页 MD
    CSS3的媒体查询(Media Queries)与移动设备显示尺寸大全
  • 原文地址:https://www.cnblogs.com/qizhou/p/13030209.html
Copyright © 2011-2022 走看看