python实战-JSON形式爬虫-批量爬取图片并下载

文章目录

      • 一、前言
      • 二、思路
        • 1、网站返回内容
        • 2、url分页结构
        • 3、根据请求快速构造代码
        • 三、具体代码的实现
      • 四、总结

一、前言

  上一篇文章已经对html形式的爬虫进行实战,批量爬取电影下载链接,接下来将实战json形式爬虫,批量爬取并下载图片。

  对python爬虫还没有了解的小伙伴可以先看看这一篇内容基于python爬虫快速入门,上篇在JSON形式讲解的代码示例就已经获取了图片链接,那么接下来将就是继续上手实战,敏感内容我会打码,主要学习的是思路。

https://blog.csdn.net/syl321314362/article/details/127780756

二、思路

  首先我们第一步先是分析目标网站的请求结构,页面是怎么返回渲染的,分页形式是怎么样的,所以弄大体的结构才有好的思路,把思路用代码的方式实现。

1、网站返回内容

  首先我们可以打开浏览器的开发工具页面(快捷键 F12),通过网络请求查看对应的请求去判断,也可以直接python写一个request请求。这里通过浏览器的开发工具页面(快捷键 F12)查看网页的请求,网站渲染是通过请求接口的形式返回json数据进行渲染。

展开json就可以看到图片的下载链接,我们来访问看看。


2、url分页结构

  网站采用的是滚动分页加载的形式,所以请求接口的时候带有两个参数,page(第几页)与per_page(每页多少张图片),返回json没有说明一共有多少页,所以就爬取1到4页的图片。
python实战-JSON形式爬虫-批量爬取图片并下载_第1张图片

3、根据请求快速构造代码

  这里推荐一个特别好用的网站,复制网络请求中的curl请求信息,复制到网站中就能快速生产各种语言的代码,真香神器。

https://curlconverter.com/

复制cURL。

粘贴到curl command框中,下面就生成对应语言代码,香呀。

三、具体代码的实现

运行前先安装lxml库

pip install lxml
import requests
import urllib
import random
import re

cookies = {
    '_ga': 'GA1.2.294029689.1668613838',
    '_gid': 'GA1.2.1578205936.1668613838',
    'uuid': '6a878630-65c6-11ed-a23a-551fd52d77f3',
    'xpos': '%7B%7D',
    'azk': '6a878630-65c6-11ed-a23a-551fd52d77f3',
    'azk-ss': 'true',
    'ugid': '8c44fb7cee50f5d0e8c3ef84991208345562046',
    'un_sesh': 'TzJRV3RTZFNtcWpBTjYrKy8vWDdXaTBVVm4wWDNWWFlqWmFmVjJ4dXBmdHFEeTArK1QwdkpuSWMzRFBHeVp2Wnh1QlpBdEh1RklHRnFPdU9hVklGOEVvUFZSUXVhSXQ3b1NySk9lRnFGRWdoQyt4NW4vQVVGUVdyOE40RzJGbkdGemd0bzBJS2VLS0M2SmQreGMxRnZESEVHUm45Wkk4UjhUbTV3MWZMVlFsV29tY1VZcGpWOStqN1BRQ2FqZENXQnhXemU5S0V3VGxsTjQ2K2dSVGFPNGJrSFBleDNaQ01xWVJ4bCt4Q08wdDFvRW10bE5Wd2ozejJTc3hrOTkxRlRESTFuOUd5UmxNa1JZazRrSjhhcnNPM3BEallZOHZaL01DMVFXQTVPVU09LS1MaEZ6dXZkV3FlRzlidmgva3hzdEJBPT0%3D--bf5872292f3fba03b72bbd9827f07605e3c9c537',
    'lux_uid': '166867509113318314',
    '_sp_ses.0295': '*',
    '_sp_id.0295': '74f1ced4-7111-4ddd-9d6f-6c24af670a81.1668613838.2.1668675780.1668613839.9f66e938-c5fa-4248-9863-f7224b0f0e6c',
}

headers = {
    'authority': 'unsplash.com',
    'accept': '*/*',
    'accept-language': 'en',
    'cache-control': 'no-cache',
    # Requests sorts cookies= alphabetically
    # 'cookie': '_ga=GA1.2.294029689.1668613838; _gid=GA1.2.1578205936.1668613838; uuid=6a878630-65c6-11ed-a23a-551fd52d77f3; xpos=%7B%7D; azk=6a878630-65c6-11ed-a23a-551fd52d77f3; azk-ss=true; ugid=8c44fb7cee50f5d0e8c3ef84991208345562046; un_sesh=TzJRV3RTZFNtcWpBTjYrKy8vWDdXaTBVVm4wWDNWWFlqWmFmVjJ4dXBmdHFEeTArK1QwdkpuSWMzRFBHeVp2Wnh1QlpBdEh1RklHRnFPdU9hVklGOEVvUFZSUXVhSXQ3b1NySk9lRnFGRWdoQyt4NW4vQVVGUVdyOE40RzJGbkdGemd0bzBJS2VLS0M2SmQreGMxRnZESEVHUm45Wkk4UjhUbTV3MWZMVlFsV29tY1VZcGpWOStqN1BRQ2FqZENXQnhXemU5S0V3VGxsTjQ2K2dSVGFPNGJrSFBleDNaQ01xWVJ4bCt4Q08wdDFvRW10bE5Wd2ozejJTc3hrOTkxRlRESTFuOUd5UmxNa1JZazRrSjhhcnNPM3BEallZOHZaL01DMVFXQTVPVU09LS1MaEZ6dXZkV3FlRzlidmgva3hzdEJBPT0%3D--bf5872292f3fba03b72bbd9827f07605e3c9c537; lux_uid=166867509113318314; _sp_ses.0295=*; _sp_id.0295=74f1ced4-7111-4ddd-9d6f-6c24af670a81.1668613838.2.1668675780.1668613839.9f66e938-c5fa-4248-9863-f7224b0f0e6c',
    'pragma': 'no-cache',
    'referer': 'https://xxxxx.com/t/nature',
    'sec-ch-ua': '"Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"windows"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1',
}

for i in range(1, 5):
    params = {
        'page': i,
        'per_page': '20',
    }
    response = requests.get('https://xxxxx.com/napi/topics/nature/photos', params=params, cookies=cookies,
                            headers=headers)
    print(len(response.json()))
    if response.status_code == 200:
        for imageUrls in response.json():
            try:
                pattern = re.compile(r'(ixid=)(.*)')
                imageUrl = imageUrls['links']['download']
                fileName = "./images/" + pattern.search(imageUrl).group(2) + str(random.randint(1, 10000)) + ".png"
                downloadImage = urllib.request.urlretrieve(imageUrl, filename=fileName)
                print("已下载: ", downloadImage)
            except Exception as e:
                print("Error: ", e)
                continue

python实战-JSON形式爬虫-批量爬取图片并下载_第2张图片
python实战-JSON形式爬虫-批量爬取图片并下载_第3张图片

四、总结

  技术是一把双刃剑,就看持剑的人是怎么想的,爬虫有风险,操作需谨慎,爬虫被判刑的例子比比皆是,需谨慎。关注我,微信搜索艺说IT公众号还有更多技术干货,对你有帮助请点个赞,感谢各位帅哥美女。

python实战-JSON形式爬虫-批量爬取图片并下载_第4张图片

你可能感兴趣的:(#,python实战,python,爬虫,json,网络爬虫)