• python图片爬虫


    前言

    unslpash绝对是找图的绝佳场所, 但是进网站等待图片加载真的令人捉急, 仿佛是一场拼RP的战争 然后就开始思考用爬虫帮我批量下载, 等下载完再挑选, 操作了一下不算很麻烦, 顺便也给大家提供一个粗糙的批量下载图片的思路.

    分析

    1. 进入网站发现不存在翻页, 一直下滑就会一直就内容, 考虑是Ajar
      右键, 进入检查->NetWork->XHR, 查看一下页面的规律 https://unsplash.com/napi/search/photos?query=输入的查询关键字&xp=&per_page=每页的图像个数&page=第几页

    2. 获取了页面URL之后再来看看每次下载的图片的地址的规律https://images.unsplash.com/photo-1514883212130-343c0e4bd349?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&dl=anh-nguyen-FZZkQZDQCtw-unsplash.jpg看起来很复杂的亚子, 先不管, 去响应内容里面看看有没有什么能用的, 来构造出这个复杂的URL

    3. 分析响应内容
      总的相应内容
      每一条都对应着该页的一个图片信息, 我们点开第一个看看
      分内容截图
      单个内容
      可以看到第三行中有一个名为id的键对应的值为FZZkQZDQCtw, 在下载的URL中出来了.
      id标签
      再往下翻, user中的name对应的值是不是和下载的URL中出现的anh-nguyen很像?只是分隔符不同.
      name标签
      距离拼出来下载URL已经成功了一半, 前面还有一大串东西没有找出来, 再去urls中找找
      url标签
      可以发现第一个full对应的url和下载url相似程度极高, 但是又多出来了一部分, 这个直接切片即可

    至此构造下载URL需要的碎片已全部集齐, 马上就可以召唤神龙.

    程序

    import requests
    from selenium import webdriver
    import time
    driver = webdriver.Chrome()
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
    }
    # 以搜索关键字job为例
    base_url = 'https://unsplash.com/napi/search/photos?query=job&xp=&per_page=20&page=2'
    response = requests.get(base_url, headers=headers)
    data = response.json()
    
    
    
    # 获取响应内容
    def get_data(base_url):
        response = requests.get(base_url, headers=headers)
        data = response.json()
        return data
    
    
    # 从相应内容中构造下载图片的url
    def download(d):
        datas = d.get('results')
        for data in datas:
            id = data.get('id')
            t_url = data.get('urls').get('full')
            t = t_url.index('ixid=')
            t_url = t_url[:t]
            name = data.get('user').get('name')
            name = name.replace(" ", '-')
            url = t_url + '&dl=' + name + '-' + id + '-unsplash.jpg'
            # 自动模拟浏览器下载
            driver.get(url)
    
    
    data = get_data(base_url)
    download(data)
    # 可能最后的几张图片无法被下载就直接关闭浏览器了
    time.sleep(30)
    driver.quit()
    

    测试

    完美运行
    运行结果

    拓展

    既然已经发现了页面url的规律, 我们可以自己构造一个url, 一页可以多显示一些图片, 再进行下载.

    def change_url(keyword, pre_page, page):
        base_url = 'https://unsplash.com/napi/search/photos?query=' + keyword + '&xp=&per_page=' + str(pre_page) + '&page=' + str(page)
        return base_url
    
  • 相关阅读:
    spring的工厂类
    spring的基于XML方式的属性注入
    github上传大于100M的文件报错
    fatal: HttpRequestException encountered
    VAR 学习笔记3
    You are my great sunshine
    warning: LF will be replaced by CRLF in
    术语词汇
    XGBoost学习笔记2
    四大基本算法思想
  • 原文地址:https://www.cnblogs.com/NFii/p/11866266.html
Copyright © 2020-2023  润新知