Python3爬取粗饼网所中国魔方选手三阶单次成绩

2023-10-09 23:30

本文主要是介绍Python3爬取粗饼网所中国魔方选手三阶单次成绩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:最近刚入门Python,在网上各种乱逛,稍微涉猎了一下Python爬虫,就想自己爬个东西练练手,加上之前自己也算是个魔方玩家,所以就想着把所以中国魔方选手的成绩都爬取保存下来,之后再对其做分析。

Python版本:3.7.0

使用方式:resquests+beautifulsoup

网站:https://cubingchina.com/results/rankings

分析页面

打开成绩页面,发现所以的选手信息都在一张表格里,打开开发者工具,发现个有意思的东西:每个选手所在行的class不同,单数是odd,双数是even,所以待会儿定位数据位置的时候得稍微注意一下儿了。
在这里插入图片描述
接着到底部,看到有下一页和末页的按钮,都在<li>标签下的<a>标签下,class分别是next和last
在这里插入图片描述
接着看后面的页面都是一样的,最后看一下最后一页,发现虽然下一页和末页的链接不能点击,但是在html文件里面是有链接的,这样就不好判断怎么是最后一页了。我处理的方式有点蠢,在抓取第一页的时候就提取出最后一页的地址,然后循环条件是下一页链接和末页链接不等,最后单独处理末页。在这里插入图片描述
爬取数据
首先打开粗饼页面

import requestsurl = ‘https://cubingchina.com/results/rankings’
response = requests.get(url)
response.encoding='utf-8'
print(response)

然后发现,403了,不让访问在这里插入图片描述
请教了下学长,说可以尝试一下模拟header,然后加了这么一句

headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}

在请求的时候加上header,成功了
在这里插入图片描述
接着就把这块封装成一个函数`

def get_html(url):'''根据url返回相应的html对象'''headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}response = requests.get(url, headers=headers)response.encoding='utf-8'html = response.text# print(response)return html

然后用beautifulsoup解析,用的是lxml方式(其实我还不明白这个是怎么用的)

from bs4 import BeautifulSoup
def get_soup(html):'''根据HTML返回beautifulsoup对象'''soup = BeautifulSoup(html, 'lxml')return soup

然后获取每一页100位选手的信息

我们需要的是选手的排名,姓名,成绩,比赛以及日期

def get_rank_list(soup):'''使用beautifulsoup解析网页,取得选手信息返回选手信息列表'''# 之前分析过,所以选手的信息在一张表格中,查看html代码获取表格的信息,提取出信息rank_text_list = soup.find('table', {'class': 'table table-bordered table-condensed table-hover table-boxed'})# 第一个tr是表头信息,所以就舍弃了rank_text_list = rank_text_list.find_all('tr')[1:]rank_list = []for rank_text in rank_text_list:# 所有的信息都在td标签里rank_text = rank_text.find_all('td')# 排名rank = rank_text[1].extract().text# 姓名name = rank_text[2].extract().text# 成绩result = rank_text[4].extract().text# 比赛competitive = rank_text[5].extract().text# 日期date = rank_text[6].extract().text# 把所有数据封装成一个元组,然后添加到选手成绩列表里item = (rank, name, result, competitive, date)rank_list.append(item)return rank_list

接着把爬到的数据写入到csv文件里

def writer_file(rank_list, flag=''):'''写入csv文件'''header = ('排名', '姓名', '成绩', '比赛', '日期')with open('333_single_China.csv', 'a', encoding='utf-8', newline='') as file:writer = csv.writer(file)if flag == 'first':writer.writerow(header)for rank in rank_list:writer.writerow(rank)

爬取完一个页面的信息后,得继续爬下一页

def get_next_url(soup):'''获取下一页地址'''url_text = soup.find('li', {'class': 'next'})url_text = url_text.find('a')# 因为是相对地址,所以还需要拼接一下网站的主地址,直接用字符串拼接是不是有点low啊(小声BB)main_url = 'https://cubingchina.com'url = main_url + url_text.get('href')return url

大体需要写好了,最后组合到main函数里

def main():start_url = 'https://cubingchina.com/results/rankings'# 先处理第一页,获取末页地址html = get_html(start_url)soup = get_soup(html)# print(soup)# 排名写入文件rank_list = get_rank_list(soup)# print(rank_list)writer_file(rank_list, 'first')print('第1页下载完成')# 获取下一页urlnext_url = get_next_url(soup)# 获取最后一页urllast_text = soup.find('li', {'class': 'last'})last_text = last_text.find('a')last_url = main_url + last_text.get('href')# 当下一页链接不等于末页链接是,接着运行i = 2while next_url != last_url:html = get_html(next_url)soup = get_soup(html)rank_list = get_rank_list(soup)writer_file(rank_list)next_url = get_next_url(soup)print('第{}页下载完成'.format(i))i += 1# 下载获取最后一页html = get_html(next_url)soup = get_soup(html)rank_list = get_rank_list(soup)writer_file(rank_list)print('第{}页下载完成'.format(i))

大概就是这样,爬出的数据如下,用excel处理了下,看着舒服点
在这里插入图片描述

最后把源码完整贴出来

'''功能:爬取粗饼网所有人三阶单次成绩作者:Davion版本:V1.0日期:2018/03/12
'''import requests
from bs4 import BeautifulSoup
import csvmain_url = 'https://cubingchina.com'def get_html(url):'''根据url返回相应的html对象'''headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}response = requests.get(url, headers=headers)response.encoding='utf-8'html = response.text# print(response)return htmldef get_soup(html):'''根据HTML返回beautifulsoup对象'''soup = BeautifulSoup(html, 'lxml')return soupdef get_rank_list(soup):'''使用beautifulsoup解析网页,取得选手信息返回选手信息列表'''rank_text_list = soup.find('table', {'class': 'table table-bordered table-condensed table-hover table-boxed'})rank_text_list = rank_text_list.find_all('tr')[1:]rank_list = []for rank_text in rank_text_list:rank_text = rank_text.find_all('td')rank = rank_text[1].extract().textname = rank_text[2].extract().textresult = rank_text[4].extract().textcompetitive = rank_text[5].extract().textdate = rank_text[6].extract().textitem = (rank, name, result, competitive, date)rank_list.append(item)return rank_listdef writer_file(rank_list, flag=''):'''写入csv文件'''header = ('排名', '姓名', '成绩', '比赛', '日期')with open('333_single_China.csv', 'a', encoding='utf-8', newline='') as file:writer = csv.writer(file)if flag == 'first':writer.writerow(header)for rank in rank_list:writer.writerow(rank)def get_next_url(soup):'''获取下一页地址'''url_text = soup.find('li', {'class': 'next'})url_text = url_text.find('a')url = main_url + url_text.get('href')return urldef main():start_url = 'https://cubingchina.com/results/rankings'html = get_html(start_url)soup = get_soup(html)# print(soup)# 排名写入文件rank_list = get_rank_list(soup)# print(rank_list)writer_file(rank_list, 'first')print('第1页下载完成')# 获取下一页urlnext_url = get_next_url(soup)# 获取最后一页urllast_text = soup.find('li', {'class': 'last'})last_text = last_text.find('a')last_url = main_url + last_text.get('href')i = 2while next_url != last_url:html = get_html(next_url)soup = get_soup(html)rank_list = get_rank_list(soup)writer_file(rank_list)next_url = get_next_url(soup)print('第{}页下载完成'.format(i))i += 1# 下载获取最后一页html = get_html(next_url)soup = get_soup(html)rank_list = get_rank_list(soup)writer_file(rank_list)print('第{}页下载完成'.format(i))if __name__=="__main__":main()

新手上路,很多不成熟和错误的地方请各位谅解
感谢观看!

这篇关于Python3爬取粗饼网所中国魔方选手三阶单次成绩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/176331

相关文章

跨国公司撤出在华研发中心的启示:中国IT产业的挑战与机遇

近日,IBM中国宣布撤出在华的两大研发中心,这一决定在IT行业引发了广泛的讨论和关注。跨国公司在华研发中心的撤出,不仅对众多IT从业者的职业发展带来了直接的冲击,也引发了人们对全球化背景下中国IT产业竞争力和未来发展方向的深思。面对这一突如其来的变化,我们应如何看待跨国公司的决策?中国IT人才又该如何应对?中国IT产业将何去何从?本文将围绕这些问题展开探讨。 跨国公司撤出的背景与

从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展

【科技明说 | 科技热点关注】 2024戴尔科技峰会在8月如期举行,虽然因事未能抵达现场参加,我只是观看了网上在线直播,也未能采访到DTF现场重要与会者,但是通过数十年对戴尔的跟踪与观察,我觉得2024戴尔科技峰会给业界传递了6大重要信号。不妨简单聊聊:从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展? 1)退出中国的谣言不攻自破。 之前有不良媒体宣扬戴尔将退出中国的谣言,随着2

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

Python-获取excel数据 - 成绩统计

Pandas库基础操作 pandas库是Python中非常受欢迎的数据分析库,提供了快速、灵活和富有表现力的数据结构,便于轻松地进行数据清洗和分析。因为它不是标准库,使用前确保环境已经安装了Pandas库。 pip install pandas 接下来,通过一个简单的例子来了解pandas的基本用法。假设有一个包含员工信息的电子表格文件名为“员工表.csv”,文本内容如下。 名字,年龄,

Python安装:Mac 使用brew 安装Python2 和 Python3

安装python ## python2brew install python ## python3brew install python3 出现错误 Error: An unexpected error occurred during the `brew link` stepThe formula built, but is not symlinked into /usr/loc

Python: #!/usr/bin/python3 #!/usr/bin/env python3

只能放在第一行,第二行就没有效果了。 1. 路径不同 #!/usr/bin/python3&& #!/usr/bin/env python3写在脚本语言第一行的目的是 想要以什么可执行程序去运行这个文件中的代码。 #!/usr/bin/python3是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python3解释器; #!/usr/bin/env python3这种用法是为了

Linux搭建Python3、Django环境

开发十年,就只剩下这套架构体系了! >>>    好久没写了,朋友们,我又回来了。 安装Python3 Python全部版本下载地址:         https://www.python.org/ftp/ 解决RedHat,使用Python3退格出现乱码问题:         yum -y install readline-devel.x86_64 下载Python3:

0基础学习爬虫系列:网页内容爬取

1.背景 今天我们来实现,监控网站最新数据爬虫。 在信息爆炸的年代,能够有一个爬虫帮你,将你感兴趣的最新消息推送给你,能够帮你节约非常多时间,同时确保不会miss重要信息。 爬虫应用场景: 应用场景主要功能数据来源示例使用目的搜索引擎优化 (SEO)分析关键词密度、外部链接质量等网站元数据、链接提升网站在搜索引擎中的排名市场研究收集竞品信息、价格比较电商网站、行业报告制定更有效的市场策略舆情

ubuntu 安装python3 教程

本篇教程,主要介绍如何在Ubuntu上安装python3教程。 1、查看是否有python 在安装前,首先看看自己系统上,是否存在python环境,可能有些系统,默认就安装过python,如果已经有python了,可以直接跳过安装教程。 2、安装步骤 apt update && apt install -y python3 python3-pip

【中国国际航空-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如