• 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 

  • 相关阅读:
    笔记35 跨重定向请求传递数
    判断邮箱的正则表达式
    按钮
    async await 的用法
    笔记34 Spring MVC的高级技术——处理multipart形式的数据
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Unique Binary Search Trees,Unique Binary Search Trees II
    Validate Binary Search Tree
    Populating Next Right Pointers in Each Node,Populating Next Right Pointers in Each Node II
  • 原文地址:https://www.cnblogs.com/qizhou/p/13030209.html
Copyright © 2020-2023  润新知