python爬取steam250游戏详细信息和下载游戏介绍视频
爬取网页地址
https://steam250.com/2020
网页详情
爬取的信息
- 游戏名称
- 游戏图片地址
- 游戏发行日期
- 游戏分类
- 游戏评分
- 游戏描述
- 游戏介绍视频
这里游戏描述需要点击单个游戏介绍界面才能看到
游戏视频则需要点击游戏图片才能查看
找到爬取数据所属的html元素
爬取思路
游戏名称 游戏图片地址 游戏发行日期 游戏分类 游戏评分这些属性可以通过抓取指定html块可以拿到,游戏详情的话可以通过两个思路来实现,一个是通过爬虫爬取这些游戏详情的地址,之后访问这些地址,另一种是编写脚本点击跳转至游戏详情页面,之后再跳回主界面,这里我选用了第二种方法,同样游戏视频我也是编写脚本写的
代码
这里我只爬取了前30名游戏信息,太多了会封ip(主要是由于下载视频)
1.启动webdriver,并获取html源码
def openFireFoxDiver():url = "https://steam250.com/2020"driver = webdriver.Firefox()driver.get(url)time.sleep(5)html_page = driver.page_source.encode('utf-8') # 取得网页的源代码return [html_page,driver];
2.保存html源码
这里我怕突然有一天网站关闭了我先备份一波源码
# path是存放地址
def saveHtmlCode(html,path):file = open(path, "wb")file.write(html)
3.获取游戏详情
def getsteam150Info(path,driver):hot_game_list = []html = EpicGamePrice.getHtmlCode(path)html.decode();html_page_soup = BeautifulSoup(html, 'html.parser')num = 1;succ = 0;game_nameAndMp4 = {'name': [], 'mp4': []}while succ<30:# 获取每个游戏 idgameInfo = html_page_soup.find('div', id=str(num))game_a = gameInfo.find('span',class_ ='title').find('a')game_name = moveHeadAndTailSpace(game_a.get_text()).replace(":","");print(game_name)tb_name = 'time_task_tb_game'count = CollectDataToMysql.select_game_count(game_name,tb_name)if(count>0):[game_date,game_catagory,game_rate] = getGameInfo(gameInfo)# 找到进入游戏详情页面div_id = driver.find_element_by_id(str(num));div_id.find_elements_by_class_name("title")[0].click()time.sleep(5)#游戏详细信息game_descr = moveHeadAndTailSpace(driver.find_elements_by_class_name("blurb")[0].text);#获取游戏图片game_logo = driver.find_elements_by_class_name("logo")[0];game_img = game_logo.find_elements_by_tag_name("img")[0].get_attribute('src')#print(game_img)#返回首页driver.back()game_mp4_src = get_mp4(driver,num)game_nameAndMp4['name'].append(game_name);game_nameAndMp4['mp4'].append(game_mp4_src);#加入热门游戏列表hot_game_list.append([game_name,game_date,game_catagory,game_rate,game_descr,game_img])succ+=1;num+=1;write_to_excel(hot_game_list,'./gameInfo_csv/hot_game.csv')CollectDataToMysql.save_hot_game_to_mysql(hot_game_list)print(game_nameAndMp4)for i in range(0,len(game_nameAndMp4['name'])):print(game_nameAndMp4['name'][i]+" "+game_nameAndMp4['mp4'][i]);download_videofile(game_nameAndMp4)
(1)因为我之前爬取过steam一些游戏信息,所以我想把这些游戏信息关联起来,所以我在获取单个游戏名称之后先在游戏表中查找是否有这个游戏,没有则跳过这个游戏
也就是下面这个函数
#select 一共有几条游戏
def select_game_count(game_name,tb_name):db = connectMysql()cur = db.cursor()sql = "SELECT COUNT(*) FROM %s where game_name = '%s';" %(tb_name,game_name)cur.execute(sql)result = cur.fetchone()#print(result[0])return result[0];
(2) 获取游戏的一些属性我用函数封装起来了
#获取热门游戏详细信息
def getGameInfo(gameInfo):game_date = moveHeadAndTailSpace(gameInfo.find('span', class_='date').get_text());game_catagory = moveHeadAndTailSpace(gameInfo.find('a',class_ = 'genre').get_text());game_rate = moveHeadAndTailSpace(gameInfo.find('span',class_ = 'score').get_text());print(game_date+" "+game_catagory+" "+game_rate)return [game_date,game_catagory,game_rate]
(3) 我把爬取的游戏信息存入了一个csv表中
def write_to_excel(game_list,path):file = open(path,'w',encoding='utf-8-sig')csv_writer = csv.writer(file)csv_writer.writerow(["game_name", "game_date", "game_catagory","game_rate","game_descr","game_img"])for i in range(0,len(game_list)):game = game_list[i];csv_writer.writerow([game[0], game[1], game[2],game[3],game[4],game[5]])file.close()
(4) 下载游戏视频
我是将下载的视频放到了磁盘中
#下载视频文件
def download_videofile(game_nameAndMp4_dic):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/51.0.2704.63 Safari/537.36'}root = './hot_game_mp41/'for i in range (0,len(game_nameAndMp4_dic['name'])):file_name = game_nameAndMp4_dic['name'][i]+".mp4"print("文件下载:%s" % game_nameAndMp4_dic['name'][i])r = requests.get(game_nameAndMp4_dic['mp4'][i], stream=True,headers=headers).iter_content(chunk_size=1024 * 1024)with open(root + file_name, 'wb') as f:for chunk in r:if chunk:f.write(chunk)print("%s 下载完成!\n" % file_name)r.close()time.sleep(60)print("所有视频下载完成!")return
爬取结果
python爬取steam250游戏详细信息和下载游戏介绍视频相关推荐
- python爬取淘宝手机信息并下载到excel文件中
#coding=GBK import requests import re from xlwt import Workbook import xlrd import time def key_name ...
- Selenium根据输入的公司名称来爬取公司的详细信息!
1.下载驱动并设置环境变量 1.1.查看你的浏览器的版本 在网址栏输入:chrome://version PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料 ...
- 超简单,Python爬取阴阳师游戏原声
Python爬取阴阳师游戏BGM,附完整代码 爬取阴阳师游戏原声 网页分析 教程开始 1 请求json文件并获取数据 2 保存文件 注意,一定要看 结语 完整源码 目标网址:https://yys.1 ...
- BeautifulSoup 根据输入的公司名称来爬取公司的详细信息(2022-08-24更新版)
BeautifulSoup 根据输入的公司名称来爬取公司的详细信息----2022-08-24更新版 1.获取headers 2.登录成功后,可根据输入的公司名称进行查询操作,得到所需要的内容. 3. ...
- python关于二手房的课程论文_基于python爬取链家二手房信息代码示例
基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...
- Python爬取安居客经纪人信息
Python爬取安居客经纪人信息 Python2.7.15 今天我们来爬取安居客经纪人的信息.这次我们不再使用正则,我们使用beautifulsoup.不了解的可以先看一下这个文档,便于理解.http ...
- java 爬取京东商品详细信息 价格
java 爬取京东商品详细信息 价格 获取图中的价格,因为京东的价格有反扒机制,价格通过js加载的,直接通过页面标签是获取不到的,所以我们要去要相应的js. http://p.3.cn/prices/ ...
- Python爬取药监局化妆品管理信息发现的问题
Python爬取药监局化妆品管理信息 **1.json格式本质上是字符串!!! 今天在爬取国家药监局化妆品管理信息的时候,发现"json数据本质上是字符串",以前我还以为json本 ...
- 爬取微博游戏名人信息
爬取微博游戏名人信息 昨天写了关于静态网站爬取爬取的文章,以为自己无所不能了,想去微博上爬点数据,差点被微博吊起来打,遇到了太多的坑了,做下记录 常规步骤 我们爬取的网址是爬取网址 我们需要爬取游戏名 ...
最新文章
- 今年1篇Science,2篇NBT,2篇MP,1篇PNAS等11篇文章,遗传发育所白洋组在植物微生物组取得系列进展!
- opensuse 安装 php,在openSUSE上安装和配置LAMP(2)
- Unity Shaders
- 所有人问「贴吧之父」俞军
- r740服务器增加内存,戴尔R740服务器获取cpu、内存、硬盘参数信息。
- c#中在工作线程创建窗体并操作
- client中周期性边界_FLUENT创建周期性边界条件方法
- LVS+Keepalived实现高可用负载均衡
- 2017.10.17 Codechef MARCH14 GERALD07加强版 失败总结
- 格力又有新专利了:“一种铁芯冲片、电机及新能源汽车”
- C语言动态链表数据结构
- 使用python编写聊天小程序
- PL/SQL中导出整个表、表结构、部分数据、以及导入整个表
- python怎么把数据导入excel_如何把python中的数据导入excel
- matlab 散点图 对数,matlab – 对数 – 对数散点图上的半透明标记
- 山东轻工业学院CSDN高校俱乐部参加“新一代语音云发布暨语音开发者大会”与“2012百度开发者大会”体会心得
- mkv文件怎样转成mp4
- 使用 Nginx 反向代理域名
- 配置web.xml文件时报The word ‘***‘ is not correctly spelled的解决方案
- SpringMVC里的Model、Map、ModelMap以及ModelAndView