Python爬取动态加载的网站图片

第一篇爬取的是静态网页,静态图片的网站,说实话,是最简单的,今天咱们就爬取一下动态的网站。
话不多说,目标网址:堆糖网
https://www.duitang.com/search/?kw=%E6%A0%A1%E8%8A%B1&type=feed

我们先分析一下网站,发现这个网站的网址没有翻页的,每当鼠标往下滑的时候,每滑到一定数量的图片的时候会再次加载新的图片,这是怎么回事呢? 其实这个就叫动态网站,动态网站最重要的不是写代码,而是分析网站,找到数据存放的真正位置。

既然知道这个是动态网站,咱们就要用到检查(F12)了,右键-检查,或者直接按F12,点击netwrok,然后再点击XHR

在这里插入图片描述
你会发现里面是空白的,怎么搞? 很简单,刷新或者按F5就可以了。
但是刷新后还是没有?怎么办?呵呵,你把网页往下拉,就出来了
在这里插入图片描述

这个就是我们需要爬取的真正网址,如果你继续往下拉,会发现有很多类似的这种网址,你可以尝试找找这些网址的不同之处

现在我们开始分析这个网站,直接看图(打字好累…)
在这里插入图片描述
按照上面的步骤就能看到图片真正存放的地方,发现这是json格式的,我们要怎么解析呢?这里给你们介绍个免费的json解析网站:https://www.json.cn/

首先把这个网址复制、然后打开一个新的窗口,粘贴,再把里面的内容复制,然后在粘贴进上面那个网站即可,emmmmm… 简单点就是复制、粘贴,不出意外你就能看到图片的地址啦

解析完毕,开始咱们的代码:

import requests

url = "https://www.duitang.com/napi/blog/list/by_search/?kw=校花&type=feed&start=0" 

headers = {
    
    
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3760.400 QQBrowser/10.5.4083.400'
}

res = requests.get(url,headers=headers).json()
obj_list = res['data']["object_list"]
for img in obj_list:
    print(img["photo"]["path"])

output:
https://c-ssl.duitang.com/uploads/item/201511/17/20151117121559_3w8u4.jpeg
https://c-ssl.duitang.com/uploads/item/201509/18/20150918195433_fA4wF.jpeg
https://c-ssl.duitang.com/uploads/item/201611/13/20161113191506_Qhxcw.jpeg
https://c-ssl.duitang.com/uploads/item/201312/17/20131217203949_RziBx.jpeg
https://c-ssl.duitang.com/uploads/item/201509/18/20150918195644_yUaTx.jpeg
https://c-ssl.duitang.com/uploads/item/201504/19/20150419H0813_FWMv4.jpeg
https://c-ssl.duitang.com/uploads/item/201504/19/20150419H0549_cGkMQ.jpeg
...

几行代码就拿到图片网址了,就是这么简单,接下来就是下载到本地了,全部代码:

import requests

for page in range(0,240,24):        # 爬取10页图片
    url = f"https://www.duitang.com/napi/blog/list/by_search/?kw=校花&type=feed&start={page}" 

    headers = {
    
    
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3760.400 QQBrowser/10.5.4083.400'
    }

    res = requests.get(url,headers=headers).json()
    obj_list = res['data']["object_list"]
    for img in obj_list:
        img_url = img["photo"]["path"]

        filename = img_url.split("/")[-1]   # 使用网址后缀作为图片名称

        image = requests.get(img_url,headers=headers)
        with open("./images/"+ str(filename),"wb") as f:
            f.write(image.content)

结果如图:
在这里插入图片描述
不到20行代码,对于动态加载的网站,分析是最重要的,只要分析对了,代码那是分分钟的事,今天就到这了,有什么建议可以给我留言哦

猜你喜欢

转载自blog.csdn.net/weixin_51211600/article/details/108919470