Steam游戏信息爬取-热销榜价格好评率折扣评论
爬取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游戏信息爬取-热销榜价格好评率折扣评论相关推荐
- Steam游戏的爬取与分析
Steam游戏的爬取与分析 本文爬取了steam冒险类游戏中热销产品中的7500个游戏进行统计分析 1.首先要先知道网页链接的组成形式: 2.其次查看我们想要爬取的信息区域: 3.开始分析: (1). ...
- steamdb免费游戏信息爬取(不是爬虫教学,日常记录,贼不工整,不喜勿看)
日常记录而已,不是特别工整,不喜勿喷,不喜勿看. 1. 数据来源于steamdb, 目标网址:https://steamdb.info/upcoming/free/ 2. 由于网址存在反爬措施,在没有 ...
- Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息
Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息 目录 输出结果 实现代码 输出结果 实现代码 # -*- coding: utf-8 -* ...
- python网易云热歌榜歌曲信息爬取(iframe框架内数据爬取,src为空)
为一线医护人员加油! 为武汉加油! 为中国加油! 为世界加油! 此爬虫是本人参考了了一位前辈的文章,并修改和优化了代码: 1.改为python3环境: 2.优化了抓取的歌曲时长中带一长串小数的问题: ...
- 用selenium爬取京东平台商品列表,爬取商品名称、价格、店铺信息
#用selenium爬取京东平台商品列表,爬取商品名称.价格.店铺信息from selenium import webdriver from selenium.webdriver.common.by ...
- Python+Selenium动态网页的信息爬取
录 一.Selenium 1.1 简介 1.2 配置 二.对百度进行自动化测试 2.1 进入百度搜索界面 2.2 自动填充百度网页的查询关键字并完成自动搜索 三.爬取指定网页的名言 3.1 找到元素 ...
- Scrapy框架爬虫项目:京东商城笔记本电脑信息爬取
一.创建Scrapy项目 在cmd中输入一下指令创建一个新的scrapy项目及一个爬虫 scrapy startproject JD_Goodscd JD_Goodsscrapy genspider ...
- 利用动态渲染页面对京东笔记本电脑信息爬取
写在前面 之前写过一个爬取京东商品的Scrapy爬虫项目,但是里面价格及评论数是通过逆向工程法获得的,在不使用代理ip的情况下,在爬取一定数量的商品后会被持续要求输入验证码.所以这里写出利用动态页面渲 ...
- python爬取京东手机参数_python爬取京东手机价格
这里我爬取京东手机价格作为事例 timg.jpg 最近刚出了iPhone X,1W元的价格有点实(guo)惠(fen),刘海也很"漂(chou)亮(lou),所以我还是看看国产手机吧,正好闲 ...
- 爬虫实战系列!淘宝店铺各品牌手机售卖信息爬取及可视化!
声明:本博客只是简单的爬虫示范,并不涉及任何商业用途. 一.前言 最近博主在浏览淘宝时突然萌发了一个想爬它的念头,于是说干就干,我便开始向淘宝"下毒手"了.由于本人平时经常喜欢在淘 ...
最新文章
- Redis应用场景说明与部署
- CCF201612-4 压缩编码(100分)
- 001-supervisor
- Deepin中设置文件或文件夹权限
- 使用计算机中的库教案,计算机应基础全部教案.doc
- java 继承 模型_java – 画布形状模型的继承与组合?
- python label位置_Python3 tkinter基础 Label pack 设置控件在窗体中的位置
- Ocelot简易教程(六)之重写配置文件存储方式并优化响应数据
- JavaFX鼠标拖拽事件
- 有感于“用界面线程去更新界面元素”
- 二叉树相关面试题(二)
- 【工具使用系列】关于 MATLAB 神经网络故障诊断,你需要知道的事
- cplex java_【CPLEX教程03】java调用cplex求解一个TSP问题模型
- php7和PHP5对比的新特性和性能优化
- 咦,我发现了微信的一个秘密
- 牛客网第二场I--car(简单图论)
- 英文论文写作相关实用网站与工具整理
- 【前端修炼场】 — 这些标签你学会了么?快速拿下 “hr”
- C语言 火车票信息管理系统
- Mac OS X 键盘快捷键 --- 很全面
热门文章
- Java开发工程师大厂面试常见问题总结(应届生版)
- 安卓异常java.lang.IllegalStateException: Content has been consumed
- 手环android app demo,【智能手环APP for Android 】01 百度map展示行动轨迹
- 发光环绕文字特效怎么做?教程来了
- 【Pytorch】量化
- matlab gui双音拨号,电子信息毕业设计---双音多频拨号系统的MATLAB仿真实现
- 2020国内可用的android镜像网站
- 查询光猫厂家为ZTE,且内存范围在0到100之间,统计去掉重复的loid之后的数量,并计算出内存的avg,max,min,sum
- C++异常类型以及多级catch匹配
- P4315 月下“毛景树” 树链剖分+线段树