zoukankan      html  css  js  c++  java
  • python爬虫学习(8) —— 关于4399的一个小Demo

    堂弟喜欢各种游戏,在没有网络的情况下,上4399显得很无力。
    另外,4399广告好多,,而且加载慢。。

    怎么办,,写个爬虫吧,,把4399上的“好玩”游戏爬下来。

    1. 分析阶段

    4399上的游戏,都是 .swf 格式的 flash

    到一个游戏,我们需要跳转若干的链接:

    真是

    • 选择一个游戏 -> 进入到游戏介绍
    • 选择开始游戏 -> 跳转到游戏界面
    • 再仔细在html代码中寻找,最终可能会找到swf源文件所在的地址
    • 有一些地址在html代码的 src 中直接给出,有一些则是给出的相对路径
    • 那么我们抛弃掉一些吧,反正游戏非常多,忽略掉一些也无所谓

    2. 动手吧

    直接贴出代码,没什么过多的解释,算是一个crawler的小练习。

    #coding=utf-8
    #爬取4399所有好玩的游戏
    import re
    import os
    import requests
    
    # 基础url
    host_url = 'http://www.4399.com'
    swfbase_url = 'http://szhong.4399.com/4399swf'  
    hw_url = 'http://www.4399.com/flash/gamehw.htm'
    
    if not os.path.exists('./swf'):
        os.mkdir(r'./swf')
    
    # 需要的正则表达式
    tmp_pat = re.compile(r'<ul class="tm_list">(.*?)</ul>',re.S)
    game_pat = re.compile( r'<li><a href="(/flash.*?)"><img alt=.*?src=".*?"><b>(.*?)</b>.*?</li>', re.S )
    swf_pat = re.compile(r'_strGamePath="(.*?swf)"',re.S)
    
    game_html = requests.get(hw_url)
    game_html.encoding = 'gb2312'
    
    tt = tmp_pat.search(game_html.text,re.S).group(1)
    
    game_list = game_pat.findall(tt)
    
    for l in game_list:
        # print l[0], l[1]
        
        game_page = requests.get(host_url + l[0]).text
        src_url = swf_pat.search(game_page)
        if src_url == None:
            continue;
        src = requests.get( swfbase_url + src_url.group(1) ).content
        print "正在保存游戏:" , l[1] 
        open( "./swf/"+ l[1] + ".swf", "wb" ).write( src )
    
    
    
    

    效果如下:

    XXX

    SSS

  • 相关阅读:
    lvs+keeplived笔录
    python之购物车的编写(熬夜撸代码中。。。)
    关于三级菜单程序的编写
    .split()函数使用方法
    range()函数的使用
    关于python如何简单跳出多层循环
    Kubernetes部署通用手册 (支持版本1.19,1.18,1.17,1.16)
    八个开源的 Spring Boot 前后端分离项目,一定要收藏!
    招聘简章-2020年10月25日19:31:39
    小公司老板的日常管理
  • 原文地址:https://www.cnblogs.com/BigBallon/p/6215898.html
Copyright © 2011-2022 走看看