当前位置:
首页 > temp > 简明python教程 >
-
如何用Python爬取小游戏网站,把喜欢的游戏收藏起来(附源码)
简介:
Python 是一门简单易学且功能强大的编程语言,无需繁琐的配置,掌握基本语法,了解基本库函数,就可以通过调用海量的现有工具包编写自己的程序,轻松实现批量自动化操作,可以极大提高办公和学习效率。Python爬虫可以批量获取网页上的数据。
Python的环境配置
1. 代码编辑器 Pycharm community
2. 代码解释器 Python 3.7.6
3. 在Pycharm中创建项目并配置Python环境
4. 安装工具包的两种方式
4399小游戏爬虫实战
1、爬虫的基本步骤
- 使用requests下载网页
- 使用BeautifulSoup将requests下载的内容解析为DOM (文档对象模型)
- 通过DOM获取所需要的数据
2、4399小游戏的本地运行
- 支持下载到本地的游戏 : 以 .swf 为扩展名的游戏
- 游戏主体页的<embed>的src属性可以得到绝对地址
游戏绝对地址示例: http://sxiao.4399.com/4399swf/upload_swf/ftp29/liuxinyu/20190731/7/main.swf
- 游戏信息页可以获取相对地址: 在<script>标签中 , Ctrl+F 搜索关键字 _strGamePath可以得到
游戏相对地址示例: /upload_swf/ftp29/liuxinyu/20190731/7/main.swf
- 所需文件: 爱奇艺万能播放器 ( 已更名为万能联播 ) ( GeePlayer.exe )万能联播PC版
3、4399小游戏爬虫实现思路
- 爬取4399好玩的小游戏页面(http://www.4399.com/flash/gamehw.htm), 通过解析得到DOM来获取所有的游戏链接
- 遍历所有的游戏链接, 开启线程下载该链接的网页并判断该游戏是否支持下载到本地, 如果支持则拼接下载地址, 并开启游戏下载线程
- 游戏下载线程: 根据下载地址来下载 .swf 文件并保存到本地
完整代码
1import os
2import re
3import threading
4
5from bs4 import BeautifulSoup as bs
6import requests
7
8
9def getAllGameUrl():
10 """
11 获取所有游戏的名称和游戏信息页的链接
12 :return:
13 """
14 gameUrlList = []
15 response = requests.get('http://www.4399.com/flash/gamehw.htm')
16 dom = bs(response.content, 'html.parser')
17 gameLiList = dom.select('#skinbody > div:nth-child(6) > ul > li')
18 for i in gameLiList:
19 # 获取游戏的名称
20 gameName = i.select_one('a > b').get_text()
21 # 获取游戏信息页的链接
22 # 'http://www.4399.com/flash/212103.htm'
23 gameInfoUrl = indexUrl + i.select_one('a')['href']
24 gameUrlList.append({'gameName': gameName, 'gameInfoUrl': gameInfoUrl})
25 return gameUrlList
26
27
28def downloadIfAvailable(game):
29 """
30 判断一个游戏是否支持本地下载
31 :return:
32 """
33 response = requests.get(game['gameInfoUrl'])
34 plainText = response.text
35 relativeUrlList = re.findall(r'(?<=_strGamePath=").+?\.swf', plainText)
36 if len(relativeUrlList) != 0:
37 gameUrl = gameBaseUrl + relativeUrlList[0]
38 game['gameUrl'] = gameUrl
39 threading.Thread(target=downloadAGame, args=(game,)).start()
40
41
42def downloadAGame(game):
43 """
44 根据下载链接下载游戏,并保存到.swf文件
45 :param game:
46 :return:
47 """
48 downloadPath = 'games/'
49 if not os.path.exists(downloadPath):
50 try:
51 os.mkdir(downloadPath)
52 except FileExistsError as e:
53 print(e)
54 with open(downloadPath + game['gameName'] + '.swf', 'wb') as file:
55 file.write(requests.get(game['gameUrl']).content)
56 print(game['gameName'] + '下载完成')
57
58
59if __name__ == '__main__':
60 indexUrl = 'http://www.4399.com'
61 gameBaseUrl = 'http://sxiao.4399.com/4399swf'
62 gameUrlList = getAllGameUrl()
63 for i in gameUrlList:
64 threading.Thread(target=downloadIfAvailable, args=(i,)).start()
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数