• python篇-第一个爬虫程序


    突然觉得爬虫的功能非常强大,于是就学了学,试着在牛客网上操作了一番。

    功能为爬取牛客网竞赛上的每一场比赛,从而以列表的形式得出每场比赛的过题量,以及获取总过题量。。。效果如下:

    经过谷歌浏览器的F12发现,这些信息存储于一个动态的js中(ps:我也不是很懂,所以就先这样描述了),因为过题信息肯定不是静态的,你AC一个题,服务器那边就会将你过题信息局部地刷新,说了这么多废话,其实就是说这些信息不会在网页源代码中,原来直接把源代码当作字符串处理的方法就不行了。。然而,这些动态信息也是有网址的,通过f12可以获取到实时的动态信息,再把含有动态信息的源代码

    当作字符串处理就行了。(ps:还需要对应身份的实时cookie)

     1 import requests
     2 import re
     3 import time
     4 import urllib
     5 from bs4 import BeautifulSoup
     6 headers = {
     7     
     8     'Cookie':'_'
     9    
    10 }
    11 
    12 
    13 urls = ['https://www.nowcoder.com/acm/contest/problem-list?token=&id={}&_=**********'.format(str(num)) for num in range(1,139)]
    14 num = 0
    15 tot = 0
    16 tottxt='data :
    '
    17 for url in urls:
    18     res = requests.get(url,headers=headers, verify = False)
    19     num = num+1
    20     try:
    21         ss = re.findall('"index":"D","myStatus":"通过"',res.text)
    22        
    23         if int(len(ss))>0:
    24             ss2 = re.search('"problemCount":d+',res.text)
    25             tottxt=tottxt+'Contest id:'+str(num)+'
    '
    26             temp = requests.get('https://www.nowcoder.com/acm/contest/{}#question'.format(str(num)))
    27             ss3 = re.search('<title>(.*?)</title>',temp.text)
    28             if ss3!=None:
    29                 newss3 =re.sub('<title>','',ss3.group())
    30                 newss3 =re.sub('_牛客网</title>','',newss3)
    31                 tottxt =tottxt+newss3+'
    '
    32            
    33             tottxt=tottxt+'     "Accepted":'+str(len(ss))+'/'
    34           
    35             tot = tot+len(ss)
    36             if ss2!=None:
    37                 newss2=re.sub('D','',ss2.group())
    38                 tottxt = tottxt +newss2
    39             tottxt=tottxt+'
    '
    40             time.sleep(2)
    41            
    42     except ConnectionError:
    43         print("**ConnectionError**")
    44         
    45 tottxt=tottxt+'
    '+'All Accepted:'+str(tot)
    46 f = open('tot2.txt','wb+')
    47 tottxt = tottxt.encode('utf-8')
    48 f.write(tottxt)
    49 f.close()
  • 相关阅读:
    VSFTP日志文件详解
    RocketMQ多master多salve集群搭建
    数据持久化之bind Mounting
    数据持久化之Data Volume
    gitLab 分支保护设置
    docker容器的端口映射
    docker命令之link
    NFS客户端挂载失败之authenticated unmount request from
    docke网络之bridge、host、none
    docke通信之Linux 网络命名空间
  • 原文地址:https://www.cnblogs.com/lnu161403214/p/9627030.html
Copyright © 2020-2023  润新知