熊孩子说“你没看过奥特曼”,赶紧用Python学习一下,没想到

没想到奥特曼竟然还真的有这么多种类。

Python 爬虫 120 例,已完成文章清单

  1. 10 行代码集 2000 张美女图,Python 爬虫 120 例,再上征途
  2. 通过 Python 爬虫,发现 60%女装大佬游走在 cosplay 领域
  3. Python 千猫图,简单技术满足你的收集控

本篇博客目标

爬取目标

  • 爬取 60+ 奥特曼,目标数据源: http://www.ultramanclub.com/?page_id=1156

    熊孩子说“你没看过奥特曼”,赶紧用Python学习一下,没想到_第1张图片

使用框架

  • requests,re

重点学习的内容

  • get 请求;
  • requests 请求超时设定,timeout 参数;
  • re 模块正则表达式;
  • 数据去重;
  • URL 地址拼接。

列表页分析
经过开发者工具的简单查阅,得到全部奥特曼卡片所在的 DOM 标签为


  • 详情页所在的标签为

    具体标签所在元素如下图所示:

    熊孩子说“你没看过奥特曼”,赶紧用Python学习一下,没想到_第2张图片

    稍后根据实际请求数据,整理一下正则表达式。

    详情页

    点击任意目标数据,进入详情页,详情页获取奥特曼图片,图片地址所在位置如下图所示。

    熊孩子说“你没看过奥特曼”,赶紧用Python学习一下,没想到_第3张图片
    右键可获得图片的所在标签。

    熊孩子不服我,用Python告诉他世界上有多少奥特曼

    整理需求如下

    1. 通过列表页,爬取全部奥特曼详情页的地址;
    2. 进入详情页,爬取详情页里面的图片地址;
    3. 下载保存图片;

    代码实现

    爬取全部奥特曼详情页地址

    在爬取列表页的过程中,发现奥特曼页面使用了 iframe 嵌套,该手段也属于最简单的反爬手段,提取真实链接即可,故目标数据源切换为 http://www.ultramanclub.com/allultraman/

    熊孩子说“你没看过奥特曼”,赶紧用Python学习一下,没想到_第4张图片

    import requests
    import re
    import time
    
    
    # 爬虫入口
    def run():
        url = "http://www.ultramanclub.com/allultraman/"
        try:
            # 网页访问速度慢,需要设置 timeout
            res = requests.get(url=url, timeout=10)
            res.encoding = "gb2312"
            html = res.text
            get_detail_list(html)
    
        except Exception as e:
            print("请求异常", e)
    
    
    # 获取全部奥特曼详情页
    def get_detail_list(html):
        start_index = '

    在代码编写过程中,发现网页访问速度慢,故设置 timeout 属性为 10,防止出现异常,

    正则表达式匹配数据时,出现了重复数据,通过 set 集合进行去重,最终在转换为 list

    接下来对获取到的 list 进行二次拼接,获取详情页地址。

    进行二次拼接得到的详情页地址,代码如下:

    # 获取全部奥特曼详情页
    def get_detail_list(html):
        start_index = '

    爬取全部奥特曼大图

    该步骤先获取网页标题的方式,然后用该标题,对奥特曼大图爬取命名。

    爬取逻辑非常简单,只需要循环上文爬取到详情页地址,然后通过正则表达式进行匹配即可。

    修改代码如下所示,关键节点查看注释。

    import requests
    import re
    import time
    
    # 声明 UA
    headers = {
         
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36"
    }
    # 存储异常路径,防止出现爬取失败情况
    error_list = []
    
    # 爬虫入口
    def run():
        url = "http://www.ultramanclub.com/allultraman/"
        try:
            # 网页访问速度慢,需要设置 timeout
            res = requests.get(url=url, headers=headers, timeout=10)
            res.encoding = "gb2312"
            html = res.text
            return get_detail_list(html)
    
        except Exception as e:
            print("请求异常", e)
    
    
    # 获取全部奥特曼详情页
    def get_detail_list(html):
        start_index = '