Python3 + BeautifulSoup 爬取Steam热销商品数据

2023-05-16

这次用了BeautifulSoup库来爬取Steam的热销商品,BeautifulSoup更侧重的是从页面的结构解析,
根据标签元素等来爬取数据,这次遇到两个问题:
1.Steam热销商品列表经常有重复的,所以我建了一个列表,把爬到的数据存进去,每次爬的时候都校验跟列表里有没有重复,有的话就跳过,防止重复爬取。
2.我需要同时遍历两个表,找到了zip()函数解决方案,下面简单介绍一下。

zip()

大家看下面的实例应该就能明白。

xs = ['我是','你是','他是']
ys = ['第一','第二','第三']

for x, y in zip(xs,ys):
	print(x+y)

输出结果如下:

我是第一
你是第二
他是第三

下面是完整爬虫代码,使用的库请自行安装不另做教学:

from bs4 import BeautifulSoup
import xlwt,os,time,requests

page = 1 #起始页数
total_pages = 3 #总页数,爬10页请设定为11
count = 1 #每抓到一次游戏名称增加一次,用来排序
pool=[] #每次抓到的游戏名称都会放进pool列表里,用来去重
document = 'Steam_GameTopSellers' #设定爬取的数据存的excel的档案名称
wb = xlwt.Workbook() #创建excel
ws = wb.add_sheet("TopSellers") #在excel新增一个sheet页
ws.write(0,0,'#')#三个参数,1:第几行,2:第几列,3:输入什么值
ws.write(0,1,'Game Title') #在excel第一行第二列先行写入'Game Title'
ws.write(0,2,'Released Date') #在excel第一行第三列先行写入'Released Date'
root = os.getcwd() #获取当前工作路径
date = time.strftime('%Y%m%d',time.localtime(time.time())) #获取当前日期 格式为yyyymmdd

while page<total_pages:
    url = 'https://store.steampowered.com/search/?tags=597&filter=topsellers&page=%s' % str(page) #设定url,变量控制页数
    r = requests.session()
    res = r.get(url).text
    soup = BeautifulSoup(res,"html.parser")
    game_names = soup.find_all('span',attrs={'class':'title'}) # 遍历所有span标签,且class属性值为'title' 即当前页面所有游戏名称
    released_dates = soup.find_all('div',attrs={'class':'col search_released responsive_secondrow'}) #当前页面所有发行日期
    for game_name, released_date in zip(game_names,released_dates): #同时遍历连个列表的方法 for x,y in zip(xs,ys):
        if game_name.string in pool: #如果爬到的数据在我的pool列表里存在的话就跳过,反之继续爬
            continue
        else:
            print('%s .GameName:%s Released on:%s' % (count,game_name.string,released_date.string)) #打印给自己看的
            pool.append(game_name.string) #把爬到的数据增加到pool列表里
            ws.write(count,0,count) #往excel写入编号
            ws.write(count,1,game_name.string) #往excel写入游戏名称
            ws.write(count,2,released_date.string) #往excel写入发行日期
            count += 1 #每遍历一次 count 变量 +1 ,用来排序写入excel里的顺序
    rate = page / (total_pages - 1)
    print('--------------------------第%s页爬取完成--------------------已完成: %.2f%%' % (str(page),(rate * 100)))
    page += 1
    wb.save('%s%s.xls' % (document,date)) #保存excel
print('--------------------------爬取完成--------------------------')
print('所有数据已存至:%s\%s%s.xls' % (root,document,date))

爬取结果(一共爬取1242条数据,51页~60页都是重复的):
在这里插入图片描述
在这里插入图片描述

结语:
这steam真是。。。后十页就是重复的,我一开始以为是有什么防爬机制,
后来在实际页面检查确实有重复的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3 + BeautifulSoup 爬取Steam热销商品数据 的相关文章

  • ubuntu18.04微信安装

    先安装一下wine wget O https deepin wine i m dev setup sh sh 若出现不能解析https的问题 xff0c 则 echo 39 nameserver 8 8 8 8 39 gt gt etc r
  • rstudio r语言_R语言的重大更新带来了巨大的变化

    rstudio r语言 用于统计计算的R语言版本4 0 0已发布 xff0c 其中对语言的语法以及与错误检查和长向量有关的功能进行了更改 升级版于4月24日发布 R 4 0 0的源代码可从cran r project org访问 R是一个G
  • 【千律】C++基础:编写实现自定义的字符串拼接函数

    include lt iostream gt using namespace std char strconnect char str 1 char str 2 int len 1 int len 2 初始化字符串 str 1 的 int
  • OpenWrt路由开启DDNS+端口转发进行外网访问

    OpenWrt路由开启DDNS 43 端口转发进行外网访问 xff08 LuCI界面实现 xff09 开篇一 准备工作二 开机 xff01 三 连接 结尾 开篇 本篇适用于一切装有OpenWrt系统的路由器 软路由 xff0c 只要你保证有
  • c语言概念题

    任何表达式语句都是表达式加分号组成的 C语言程序是从源文件的第一条语句开始执行的 xff08 x 从main函数开始执行 C 语言中的变量名区分大小写 运算符优先级以及结合方式 1 初等运算符 xff1a xff08 xff09 取结构体变
  • c 语言概念题【最全整理】

    任何表达式语句都是表达式加分号组成的 C语言程序是从源文件的第一条语句开始执行的 xff08 x 从main函数开始执行 C 语言中的变量名区分大小写 运算符优先级以及结合方式 1 初等运算符 xff1a xff08 xff09 取结构体变
  • python中变量的命名以及使用

    一 变量的概念 变量名只有在第一次出现的时候 xff0c 才是定义变量 当再次出现时 xff0c 不是定义变量 xff0c 而是直接使用之前定义的变量 1 变量命名 1 xff09 命名的规范性 变量名可以包括字母 数字 下划线 xff0c
  • WSL 导入导出迁移 相关命令

    wsl export Ubuntu D Ubuntu tar wsl unregister Ubuntu wsl import Ubuntu D Ubuntu D Ubuntu tar version 2 ubuntu exe config
  • 2019年3月PAT甲级认证经验教训总结~~~路还很长,慢慢来

    今天的PAT认证是我人生中的第二次算法考试 xff0c 第一次是六年前大一学习 C 语言时学校举行的算法比赛 跟第一次一样 xff0c 这次考得也非常失败 xff0c 只做出来前两道题 去年七月份辞职跨专业考研 xff0c 选了自己感兴趣的
  • ubuntu系统代理配置

    vim etc apt apt conf Acquire http proxy http username password 64 192 168 1 1 8080
  • Linux 软件包管理常用命令

    安装软件包 apt get install packagename 删除软件包 apt get remove packagename 更新软件包列表 apt get update 升级有可用更新的系统 xff08 慎用 xff09 apt
  • flask框架初学-11-解决跨域问题

    在前面的学习中 xff0c 我们都是在本地起服务 xff0c 再在本地访问资源及界面 xff0c 但是实际当中都是开启多台服务器 xff0c 提供给局域网外的用户访问 这就牵涉到了跨域问题 xff0c 跨域问题来源于同源策略 xff0c 同
  • CSP-序列查询新解(C++简单易懂)

    题目背景 上一题 序列查询 中说道 xff1a A 61 A0 A1 A2 An 是一个由 n 43 1 个 0 N 范围内整数组成的序列 xff0c 满足 0 61 A0 lt A1 lt A2 lt lt An lt N 基于序列 A
  • 九、51单片机之直流电机驱动

    目录 1 什么是电机 2 常见电机 2 1 交流电机 2 2 交流电机补充 可跳过 2 3 直流电机 2 4 步进电机 伺服电机 3 直流电机驱动 1 什么是电机 1 电机的全称是电动机 xff0c 把电能转换成动能的一种电器 2 外观 2
  • 【Linux】 Linux下查询CPU、内存、硬盘、服务器型号、出厂日期

    一 查看CPU 1 1 查看CPU个数 cat span class token operator span proc span class token operator span cpuinfo span class token oper
  • 1.5 字符

    输入 输出 getchar putchar 1 5 1 文件复制 include lt stdio h gt 将输入复制到输出 xff1b 版本1 main int c c 61 getchar while c 61 EOF putchar
  • docker基础学习入门(六)------ DockerFile解析

    DockerFile是什么 Dockerfile是用来构建Docker镜像的构建文件 xff0c 是由一系列命令和参数构成的脚本 构建三步骤 xff1a 编写Dockerfile文件docker builddocker run 构建的文件什
  • mysql小练习

    设教学数据库Education有三个关系 xff1a 学生关系S xff08 SNO xff0c SNAME xff0c AGE xff0c SEX xff0c SDEPT xff09 xff1b 学系关系SC xff08 SNO xff0
  • C++ 快速幂取模运算理解

    C 43 43 快速幂取模运算理解 概念非递归方法原理代码实例 递归方法原理代码实例 概念 快速幂运算也叫反复平方法 顾名思义 xff0c 算法就蕴含在名字中 非递归方法 原理 假设要求 x 2 x 2 x 2
  • 01迷宫(洛谷)

    题目描述 有一个仅由数字 000 与 111 组成的 n nn times nn n 格迷宫 若你位于一格0上 xff0c 那么你可以移动到相邻 444 格中的某一格 111 上 xff0c 同样若你位于一格1上 xff0c 那么你可以移动

随机推荐