超级马里奥

真是令人回忆的画面啊!!

运行环境与所需库文件

  • python3
  • requests && BeautifulSoup

正文开始

首先百度nes 你会得到这个网址 http://www.nesyouxi.net/

点开之后你会惊喜的发现里面有很多小时候玩过的小游戏。


这么多游戏,我们随便点开一个看看吧(就决定是你了魂斗罗)。

细心的你肯定发现了,原本的url后面多了/nes/7452,当你试着更改后面的数字的后你会发现,好像是每个数字都对应一个游戏,这就很方便我们爬取了,我们现在只从1跑到n,就可一把所有的nes游戏爬下来了。然后我们定位到下载地址,找到了图中的阴影部分,发现这些资源链接都是在class = "btn btn-danger download-button"的a标签中的。
好了,现在我们可以索引到所有的nes游戏资源了,准备工作做完了,现在开始写代码了。

import requests
from bs4 import BeautifulSoup

def getGameLink(url, header):
    
    req = requests.get(url, headers = header)#向该网站发起请求
    req.encoding = req.apparent_encoding#设置响应编码
    html = req.text#获取相应内容
    #这个过程就是把整个网页源代码下载下来

    #用BeutifulSoup来解析网页
    soup = BeautifulSoup(html, "lxml")

    #找到所有符合要求的a标签,a标签中包含下载链接
    downtags = soup.find_all("a", class_ = "btn btn-danger download-button")
    #这里的h2标签里是该游戏的名字,保存下来以便为文件命名
    nametags = soup.find_all("h2", class_ = "section-title big")

    #注意有的游戏名称可能会包含‘/’,会对写入文件路径造成干扰,所以这里替换成‘-’
    return (nametags[0].text.strip().replace('/', '-'), downtags[0]["href"])

def getGameRoms():

    header = {
        "User-Agent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
    }

    #直接暴力跑每一个游戏页面
    for number in range(1, 7543):
        url = "http://nesyouxi.net/nes/{0}".format(number)
        games = getGameLink(url, header)
        
        #成功获取到游戏的名字跟链接了,现在把他们下载下来
        req = requests.get("http://nesyouxi.net/{0}".format(games[1]))
        
        #万事ok,现在把游戏资源写进文件里!!!一定要用二进制方式写入,所有也要配套使用content
        with open("/home/qwq_hai/Downloads/{0}.nes".format(games[0]), "wb") as fp:
                fp.write(req.content)
        print(number, games[0])
getGameRoms()

这是爬的过程(代码略有改动),是不是满满的成就感呢。
噜噜噜