在某某图片上爬取想要的图片

本文介绍了如何使用Python进行网络爬虫,通过分析某度搜索页面的XHR接口,动态获取壁纸图片的链接。在浏览器中利用开发者工具发现接口规律,特别是滑动页面时更新的URL。接着,利用Requests库发送GET请求,解析JSON数据,通过循环获取所有图片链接,并下载保存至本地文件夹。通过调整URL中的pn参数实现多页爬取。
摘要由CSDN通过智能技术生成

目录​​​​​​​

前置工作(如何找到URL)​​​​​​​

源码

前置工作

我想在某度上爬取下来然后单独挑选合适的壁纸。

我用的是某歌浏览器,不同的浏览器在操作上大同小异

来到搜索页,我们会发现这是滚轮下滑(埋下伏笔【狗头】),打开检查页(F12),点击“网络”(未汉化的是Network),再点击“Fetch/XHR”,然后刷新一下页面,我们会看到一些接口

 此时我们还是没有啥头绪,然后我们将页面向下滑动 !

我们会发现随着我们向下滑动页面,窗口中出现了几个相同的接口,点击第一个相同的接口,查看预览,找到data并点击,会发现有0到30个小字典,点击第一个,在里边的内容中我们便可以找到对应的图片链接“middleURL”,这代表着我们已经成功了一半!

开始我们的代码工作,点击标头,对应的url便是我们需要的URL,再找到响应标头,找到User-Agent这是我们的headers

url = 巴拉巴拉

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'
}

同时查看本接口的请求方法

Get方法

导包Requests,发起get请求

import requests    #导包

response = requests.get(url = url ,headers = headers)       #发出Get请求

 接收json数据

data_json = response.json()                 #接收json数据

接收到数据后,我们要从中获取到我们想要的图片链接“middleURL”,首先我们要获取key名为“data”的内容,因为“middleURL”在“data”中,同时“data”中存储的是0-29张照片的“middleURL”(因为30为空),所以我们需要通过For循环来获取全部“middleURL”,得到“middleURL”后,同样是发起Get请求,获取图片的二进制数据,再将它们写入我们想要的文件夹!

data_list = data_json['data']               #获取钥匙名为“data”的内容

    for data in data_list[:-1] :                #持续获取“middlURL”数据

        middleURL = data['middleURL']            

        img_data = requests.get(middleURL).content    #向图片链接发起get请求

        with open(f'img_bizhi/{number}.jpg', mode='wb') as f:    #向文件夹中写入二进制数据

            f.write(img_data)

        number += 1    #图片名称

至此第一页的照片爬取完毕,但这远远不够,回到浏览器的窗口中,我们点击第二个相同接口,查看URL,同样的第三个第四个....,寻找他们的规律,我们会发现,其中的奥妙存在于后段的pn上每30页是一个新的页面,至此问题全部解决,我们用For循环来完成URL的改变。


源码

全部源码(已打码)

import requests

number = 1;
for page in range(1,11):           
    url =f'打码打码打码打码打码打码打码&pn={page*30}&打码打码打码打码打码打码'
    headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
    }
    response = requests.get(url = url ,headers = headers)       

    data_json = response.json()                 
    data_list = data_json['data']               
    for data in data_list[:-1] :                
        middleURL = data['middleURL']
        img_data = requests.get(middleURL).content
        with open(f'img_bizhi/{number}.jpg', mode='wb') as f:
            f.write(img_data)
        number += 1
    print(f'第{page}页完成')

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值