python爬虫查看CF上区域赛学校排名

一天需要知道之前的一次区域赛的排名,之前比赛的榜没了,看到cf的gym里有榜,但是没有学校排名,就准备自己写一下爬虫试试。

然后就网上初步学习爬虫

大概思路

首先它页面估计都是动态生成的,所以不能直接用bs4获取源码,我是直接用selenium模拟访问,等到所有元素加载完成之后,用pagesource获取源码,然后用BeautifulSoup生成BeautifulSoup对象,在之后就一步一步获取元素(详情见代码)。
但总感觉自己实现比较麻烦,不知道有没有更好的方法或者多级标签 下的元素(有些元素没有id、class)
主要就是效率比较慢。

代码

# author : nofuck
# -*- codeing = utf-8 -*-
# @Time : 2020/11/19 10:59
# @Author : 李汶骏
# @Site : 
# @File : run.py
# @Software : PyCharm

# -*- codeing = utf-8 -*-
from selenium import webdriver # 用来驱动浏览器
from selenium.webdriver import Chrome,ChromeOptions
from bs4 import BeautifulSoup
import re

def get(str):
    ans = re.split(" ",str)
    if ans[1][0]=='*' :
        return None
    return ans[1]


def run(url):
    print("获取中...")
    option = ChromeOptions()
    option.headless = True
    browser = webdriver.Chrome(options=option)
    try:
        browser.implicitly_wait(10)
        browser.get(url)
        html = browser.page_source
        soup = BeautifulSoup(html,'lxml')
        ret = soup.select('#pageContent  .datatable  .standings tr') # 队伍的信息的列表
        id,rank = 0,1
        vis = {'-1':1}
        for i in ret:
            id = id + 1
            if (id==1) : continue;
            par = BeautifulSoup(str(i),'lxml') #得到第i支队伍信息
            ans = par.select('tr td') # 得到td里的信息
            res = BeautifulSoup(str(ans[1]), 'lxml')
            res1 = BeautifulSoup(str(res.select('span')),'lxml')
            ans_str = get(res1.text)
            if ans_str not in vis.keys() :
                vis[ans_str] = rank
                rank = rank + 1
        while True:
            name = input('输入要查找的学校排名:')
            if name=='-1' :
                break
            print(name, ' ', vis[name])

    finally:
        browser.quit()


if __name__ == '__main__' :
    run(input('输入要爬取的网页:'))

参考链接

bs部分语法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值