爬取Steam热销榜信息

最近学习了一下爬虫,练练手,第一次写文章,请多多包涵O(∩_∩)O
爬取Steam热销榜:游戏排名、游戏名字、价格、好评率、游戏详情页面跳转链接。


Steam热销榜爬虫

  • 爬取Steam热销榜信息
  • 一、开始爬虫前
    • 1.引入库
    • 2.读入数据
  • 二、分析网页
    • 1.首先观察价格,有两种形式,一种是原价,一种是打折后的价格
    • 2.名字、游戏详情页链接
    • 3.好评率
  • 三、爬取信息并处理
    • 1.游戏详情页面链接
    • 2.好评率
    • 3.名字、价格
  • 四、信息保存
  • 五、主函数
  • 六、全部代码
  • 七、总结
    • 1.心情

一、开始爬虫前

1.引入库

热销榜为静态页面,所需要的库:requests,pandas,BeautifulSoup

import requests
import pandas as pd
from bs4 import BeautifulSoup

2.读入数据

headers里需要加入 ‘Accept-Language’: 'zh-CN ',不然返回来的游戏名字是英文

def get_text(url):try:headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/85.0.4183.102 Safari/537.36', 'Accept-Language': 'zh-CN '}r = requests.get(url, headers=headers)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return "爬取网站失败!"

二、分析网页

热销榜链接:
https://store.steampowered.com/search/?filter=globaltopsellers&page=1&os=win

1.首先观察价格,有两种形式,一种是原价,一种是打折后的价格


(1)正常价格

(2)打折后价格,对比可发现class = “col search_discount responsive_secondrow” 是用于储存折扣的。原价为None,打折不为None,以此做为判断条件提取价格。

2.名字、游戏详情页链接

由代码可以知道:
游戏详情页链接全在 id = “search_resultsRows” 的a.href 标签里
名字在 class = “title” 里

3.好评率

由图可以发现有些游戏没有评价

查看代码发现:
好评率在 class = “col search_reviewscore responsive_secondrow” 中,无评价为None

三、爬取信息并处理

1.游戏详情页面链接

提取a[‘href’] 保存到 jump_link 列表

link_text = soup.find_all("div", id="search_resultsRows")for k in link_text:b = k.find_all('a')for j in b:jump_link.append(j['href'])

2.好评率

提前好评率和评价数到 game_evaluation 列表。

u.span["data-tooltip-html"].split("<br>")[0]   # 评价
例:多半好评
u.span["data-tooltip-html"].split("<br>")[-1])  # 好评率
例:276,144 篇用户的游戏评测中有 78% 为好评。
w = soup.find_all(class_="col search_reviewscore responsive_secondrow")for u in w:if u.span is not None:                 # 判断是否评价为None。game_evaluation.append(u.span["data-tooltip-html"].split("<br>")[0] + "," + u.span["data-tooltip-html"].split("<br>")[-1])else:game_evaluation.append("暂无评价!")

3.名字、价格

用strip去除多余空格,用split切割,提取其中的价格
global num 是游戏排名。
game_info 是列表,存储所有的信息。

price = z.find(class_="col search_price discounted responsive_secondrow").text.strip().split("¥")
print(price)                    # 切割后的打折price
print(price[2].strip())         # 需要保存的价格结果为:
['', ' 116', ' 58']
58
global num
name_text = soup.find_all('div', class_="responsive_search_name_combined")
for z in name_text:# 每个游戏的价格name = z.find(class_="title").string.strip()# 判断折扣是否为None,提取价格if z.find(class_="col search_discount responsive_secondrow").string is None:price = z.find(class_="col search_price discounted responsive_secondrow").text.strip().split("¥")game_info.append([num + 1, name, price[2].strip(), game_evaluation[num], jump_link[num]])else:price = z.find(class_="col search_price responsive_secondrow").string.strip().split("¥")game_info.append([num + 1, name, price[1], game_evaluation[num], jump_link[num]])num = num + 1

四、信息保存

def save_data(game_info):save_path = "E:/Steam.csv"      # 保存路径df = pd.DataFrame(game_info, columns=['排行榜', '游戏名字', '目前游戏价格¥', '游戏页面链接', '游戏评价'])df.to_csv(save_path, index=0)print("文件保存成功!")

五、主函数

一页有25个游戏,翻页链接直接在原链接后面加 &page= 第几页
想爬取多少页游戏,就把 range(1,11)的11改成多少页+1

if __name__ == "__main__":Game_info = []            # 所有游戏信息Turn_link = []         # 翻页链接Jump_link = []          # 游戏详情页面链接Game_evaluation = []    # 游戏好评率和评价for i in range(1, 11):Turn_link.append("https://store.steampowered.com/search/?filter=globaltopsellers&page=1&os=win" + str("&page=" + str(i)))run(Game_info, Jump_link, Game_evaluation, get_text(Turn_link[i-1]))save_data(Game_info)

六、全部代码

num 是排名;run 函数里要调用 BeautifulSoup 函数解析

2022/5/26 网络原因会影响爬虫,建议先确定能否访问steam热销榜页数及游戏详情页再尝试代码。我在开加速器时也会出现访问失败,所以不建议爬取steam了。我开加速器有时可以有时不可以,用debug打断点可以看到链接也成功获取而且与网页跳转链接是一致的,代码应该没错但是得注意网络问题谢谢。

import requests
import pandas as pd
from bs4 import BeautifulSoup
num = 0def get_text(url):try:headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/85.0.4183.102 Safari/537.36', 'Accept-Language': 'zh-CN '}r = requests.get(url, headers=headers)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return "爬取网站失败!"def run(game_info, jump_link, game_evaluation, text):soup = BeautifulSoup(text, "html.parser")# 游戏评价w = soup.find_all(class_="col search_reviewscore responsive_secondrow")for u in w:if u.span is not None:game_evaluation.append(u.span["data-tooltip-html"].split("<br>")[0] + "," + u.span["data-tooltip-html"].split("<br>")[-1])else:game_evaluation.append("暂无评价!")# 游戏详情页面链接link_text = soup.find_all("div", id="search_resultsRows")for k in link_text:b = k.find_all('a')for j in b:jump_link.append(j['href'])# 名字和价格global numname_text = soup.find_all('div', class_="responsive_search_name_combined")for z in name_text:# 每个游戏的价格name = z.find(class_="title").string.strip()# 判断折扣是否为None,提取价格if z.find(class_="col search_discount responsive_secondrow").string is None:price = z.find(class_="col search_price discounted responsive_secondrow").text.strip().split("¥")game_info.append([num + 1, name, price[2].strip(), game_evaluation[num], jump_link[num]])else:price = z.find(class_="col search_price responsive_secondrow").string.strip().split("¥")game_info.append([num + 1, name, price[1], game_evaluation[num], jump_link[num]])num = num + 1def save_data(game_info):save_path = "E:/Steam.csv"df = pd.DataFrame(game_info, columns=['排行榜', '游戏名字', '目前游戏价格¥', '游戏评价', '游戏页面链接'])df.to_csv(save_path, index=0)print("文件保存成功!")if __name__ == "__main__":Game_info = []          # 游戏全部信息Turn_link = []          # 翻页链接Jump_link = []          # 游戏详情页面链接Game_evaluation = []    # 游戏好评率和评价for i in range(1, 11):Turn_link.append("https://store.steampowered.com/search/?filter=globaltopsellers&page=1&os=win" + str("&page=" + str(i)))run(Game_info, Jump_link, Game_evaluation, get_text(Turn_link[i-1]))save_data(Game_info)


七、总结

以上就是今天要讲的内容,本文仅仅简单介绍了request 和 BeautifulSoup 的使用。

突破点在于:有些页面信息的位置不同,能否找出判断条件

1.心情

初学爬虫,也是第一次写博客,对于优化和多线程目前没有太多了解,本文的代码可能有点繁琐,不过也能做到轻松爬取信息。O(∩_∩)O

转载请标明作者和出处!

Steam游戏信息爬取-热销榜价格好评率折扣评论相关推荐

  1. Steam游戏的爬取与分析

    Steam游戏的爬取与分析 本文爬取了steam冒险类游戏中热销产品中的7500个游戏进行统计分析 1.首先要先知道网页链接的组成形式: 2.其次查看我们想要爬取的信息区域: 3.开始分析: (1). ...

  2. steamdb免费游戏信息爬取(不是爬虫教学,日常记录,贼不工整,不喜勿看)

    日常记录而已,不是特别工整,不喜勿喷,不喜勿看. 1. 数据来源于steamdb, 目标网址:https://steamdb.info/upcoming/free/ 2. 由于网址存在反爬措施,在没有 ...

  3. Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息

    Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息 目录 输出结果 实现代码 输出结果 实现代码 # -*- coding: utf-8 -* ...

  4. python网易云热歌榜歌曲信息爬取(iframe框架内数据爬取,src为空)

    为一线医护人员加油! 为武汉加油! 为中国加油! 为世界加油! 此爬虫是本人参考了了一位前辈的文章,并修改和优化了代码: 1.改为python3环境: 2.优化了抓取的歌曲时长中带一长串小数的问题: ...

  5. 用selenium爬取京东平台商品列表,爬取商品名称、价格、店铺信息

    #用selenium爬取京东平台商品列表,爬取商品名称.价格.店铺信息from selenium import webdriver from selenium.webdriver.common.by ...

  6. Python+Selenium动态网页的信息爬取

    录 一.Selenium 1.1 简介 1.2 配置 二.对百度进行自动化测试 2.1 进入百度搜索界面 2.2 自动填充百度网页的查询关键字并完成自动搜索 三.爬取指定网页的名言 3.1 找到元素 ...

  7. Scrapy框架爬虫项目:京东商城笔记本电脑信息爬取

    一.创建Scrapy项目 在cmd中输入一下指令创建一个新的scrapy项目及一个爬虫 scrapy startproject JD_Goodscd JD_Goodsscrapy genspider ...

  8. 利用动态渲染页面对京东笔记本电脑信息爬取

    写在前面 之前写过一个爬取京东商品的Scrapy爬虫项目,但是里面价格及评论数是通过逆向工程法获得的,在不使用代理ip的情况下,在爬取一定数量的商品后会被持续要求输入验证码.所以这里写出利用动态页面渲 ...

  9. python爬取京东手机参数_python爬取京东手机价格

    这里我爬取京东手机价格作为事例 timg.jpg 最近刚出了iPhone X,1W元的价格有点实(guo)惠(fen),刘海也很"漂(chou)亮(lou),所以我还是看看国产手机吧,正好闲 ...

  10. 爬虫实战系列!淘宝店铺各品牌手机售卖信息爬取及可视化!

    声明:本博客只是简单的爬虫示范,并不涉及任何商业用途. 一.前言 最近博主在浏览淘宝时突然萌发了一个想爬它的念头,于是说干就干,我便开始向淘宝"下毒手"了.由于本人平时经常喜欢在淘 ...

最新文章

  1. Redis应用场景说明与部署
  2. CCF201612-4 压缩编码(100分)
  3. 001-supervisor
  4. Deepin中设置文件或文件夹权限
  5. 使用计算机中的库教案,计算机应基础全部教案.doc
  6. java 继承 模型_java – 画布形状模型的继承与组合?
  7. python label位置_Python3 tkinter基础 Label pack 设置控件在窗体中的位置
  8. Ocelot简易教程(六)之重写配置文件存储方式并优化响应数据
  9. JavaFX鼠标拖拽事件
  10. 有感于“用界面线程去更新界面元素”
  11. 二叉树相关面试题(二)
  12. 【工具使用系列】关于 MATLAB 神经网络故障诊断,你需要知道的事
  13. cplex java_【CPLEX教程03】java调用cplex求解一个TSP问题模型
  14. php7和PHP5对比的新特性和性能优化
  15. 咦,我发现了微信的一个秘密
  16. 牛客网第二场I--car(简单图论)
  17. 英文论文写作相关实用网站与工具整理
  18. 【前端修炼场】 — 这些标签你学会了么?快速拿下 “hr”
  19. C语言 火车票信息管理系统
  20. Mac OS X 键盘快捷键 --- 很全面

热门文章

  1. Java开发工程师大厂面试常见问题总结(应届生版)
  2. 安卓异常java.lang.IllegalStateException: Content has been consumed
  3. 手环android app demo,【智能手环APP for Android 】01 百度map展示行动轨迹
  4. 发光环绕文字特效怎么做?教程来了
  5. 【Pytorch】量化
  6. matlab gui双音拨号,电子信息毕业设计---双音多频拨号系统的MATLAB仿真实现
  7. 2020国内可用的android镜像网站
  8. 查询光猫厂家为ZTE,且内存范围在0到100之间,统计去掉重复的loid之后的数量,并计算出内存的avg,max,min,sum
  9. C++异常类型以及多级catch匹配
  10. P4315 月下“毛景树” 树链剖分+线段树