如何用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
  1. 遊戲信息頁可以獲取相對地址: 在<script>標籤中 , Ctrl+F 搜索關鍵字 _strGamePath可以得到

 
遊戲相對地址示例: /upload_swf/ftp29/liuxinyu/20190731/7/main.swf
  1. 所需文件: 愛奇藝萬能播放器 ( 已更名爲萬能聯播 ) ( 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()

歡迎點擊左上角關注小編,除了分享技術文章之外還有很多福利,私信學習資料可以領取包括不限於Python實戰演練、PDF電子文檔、面試集錦、學習資料等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章