python爬蟲:隨心所欲地爬取百度圖片

coldplay.xixi
發布: 2021-03-05 10:04:57
轉載
6045 人瀏覽過

python爬蟲:隨心所欲地爬取百度圖片

文章目錄

    • #一、前言
    • 二、需要導入的函式庫
    • 三、實作過程
        • 1、下載連結分析
        • 2、程式碼分析
        • #3 、完整程式碼
    • 四、Blogger's speech

(免費學習推薦:python影片教學)

#一、前言

##之前爬取了很多靜態網頁的內容,包括:小說、圖片等等,今天我來嘗試動態網頁的爬取。眾所周知,百度圖片就是一個動態網頁。那麼,衝!衝! !衝! ! !

二、需要匯入的函式庫

import requestsimport jsonimport os
登入後複製

三、實作過程

1、下載連結分析

首先,打開百度,搜尋一個內容,這裡搜尋的是男神(

本人 )-彭于晏
python爬蟲:隨心所欲地爬取百度圖片 然後,打開抓包工具,選擇
XHR選項,按Ctrl R,然後你會發現,隨著你滑鼠的滑動,右側會出現一個又一個的資料包。
python爬蟲:隨心所欲地爬取百度圖片
(這裡沒滑太多,一開始因為滑動太多,錄製的GIF超5M了)

然後,選一個包,查看它的headers,如圖:


python爬蟲:隨心所欲地爬取百度圖片

截取之後,貼在記事本上,作為一個URL,後文會用到。


python爬蟲:隨心所欲地爬取百度圖片 這裡有很多很多的參數,我也不知道具體哪些是可以忽略的,後文就索性全複製下來了,具體看後文。

到這裡,能夠直接觀察到的內容就結束了,接下來,借助程式碼,幫我們打開另一個世界的大門

衝就完事了!

2、程式碼分析

首先:把上述中的「

其它參數」組在一起。

自己做的話,最好複製自己的「

其它參數」。在

之後,我們可以先提取一下試試,並且把編碼格式改成

'utf-8'

 url = 'https://image.baidu.com/search/acjson?'
    param = {
        'tn': 'resultjson_com',
        'logid': ' 7517080705015306512',
        'ipn': 'rj',
        'ct': '201326592',
        'is': '',
        'fp': 'result',
        'queryWord': '彭于晏',
        'cl': '2',
        'lm': '-1',
        'ie': 'utf-8',
        'oe': 'utf-8',
        'adpicid': '',
        'st': '',
        'z': '',
        'ic': '',
        'hd': '',
        'latest': '',
        'copyright': '',
        'word': '彭于晏',
        's': '',
        'se': '',
        'tab': '',
        'width': '',
        'height': '',
        'face': '',
        'istype': '',
        'qc': '',
        'nc': '1',
        'fr': '',
        'expermode': '',
        'force': '',
        'cg': 'star',
        'pn': '30',
        'rn': '30',
        'gsm': '1e',
    }
    # 将编码形式转换为utf-8
    response = requests.get(url=url, headers=header, params=param)
    response.encoding = 'utf-8'
    response = response.text    print(response)
登入後複製
運行結果如下:


python爬蟲:隨心所欲地爬取百度圖片 看上去挺亂的哈,沒事,我們給包裝一下!

在上面的基礎上加上:

 # 把字符串转换成json数据
    data_s = json.loads(response)
    print(data_s)
登入後複製
運行結果如下:


python爬蟲:隨心所欲地爬取百度圖片 和上面相比,已經明晰很多了,但依舊不夠明確,為什麼呢?因為它印刷的格式不方便我們觀看!

對此,有兩種解決辦法。

①導入

pprint庫,接著輸入pprint.pprint(data_s),就能列印啦,如下圖

python爬蟲:隨心所欲地爬取百度圖片


python爬蟲:隨心所欲地爬取百度圖片


python爬蟲:隨心所欲地爬取百度圖片


#②使用json線上解析器(自行百度),結果如下:python爬蟲:隨心所欲地爬取百度圖片
python爬蟲:隨心所欲地爬取百度圖片
解決掉上一步,我們會發現,想要的資料都在data裡面!

那就提取吧!

 a = data_s["data"]
    for i in range(len(a)-1):  # -1是为了去掉上面那个空数据
        data = a[i].get("thumbURL", "not exist")
        print(data)
登入後複製

結果如下:

到這裡,已經成功90%啦,剩下的就是儲存和最佳化程式碼了!

3、完整程式碼######這部分和上面有些許不同,仔細看看就會發現嗷! ###
# -*- coding: UTF-8 -*-"""
@Author  :远方的星
@Time   : 2021/2/27 17:49
@CSDN    :https://blog.csdn.net/qq_44921056
@腾讯云   : https://cloud.tencent.com/developer/user/8320044
"""import requestsimport jsonimport osimport pprint# 创建一个文件夹path = 'D:/百度图片'if not os.path.exists(path):
    os.mkdir(path)# 导入一个请求头header = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}# 用户(自己)输入信息指令keyword = input('请输入你想下载的内容:')page = input('请输入你想爬取的页数:')page = int(page) + 1n = 0pn = 1# pn代表从第几张图片开始获取,百度图片下滑时默认一次性显示30张for m in range(1, page):
    url = 'https://image.baidu.com/search/acjson?'
    param = {
        'tn': 'resultjson_com',
        'logid': ' 7517080705015306512',
        'ipn': 'rj',
        'ct': '201326592',
        'is': '',
        'fp': 'result',
        'queryWord': keyword,
        'cl': '2',
        'lm': '-1',
        'ie': 'utf-8',
        'oe': 'utf-8',
        'adpicid': '',
        'st': '',
        'z': '',
        'ic': '',
        'hd': '',
        'latest': '',
        'copyright': '',
        'word': keyword,
        's': '',
        'se': '',
        'tab': '',
        'width': '',
        'height': '',
        'face': '',
        'istype': '',
        'qc': '',
        'nc': '1',
        'fr': '',
        'expermode': '',
        'force': '',
        'cg': 'star',
        'pn': pn,
        'rn': '30',
        'gsm': '1e',
    }
    # 定义一个空列表,用于存放图片的URL
    image_url = list()
    # 将编码形式转换为utf-8
    response = requests.get(url=url, headers=header, params=param)
    response.encoding = 'utf-8'
    response = response.text    # 把字符串转换成json数据
    data_s = json.loads(response)
    a = data_s["data"]  # 提取data里的数据
    for i in range(len(a)-1):  # 去掉最后一个空数据
        data = a[i].get("thumbURL", "not exist")  # 防止报错key error
        image_url.append(data)

    for image_src in image_url:
        image_data = requests.get(url=image_src, headers=header).content  # 提取图片内容数据
        image_name = '{}'.format(n+1) + '.jpg'  # 图片名
        image_path = path + '/' + image_name  # 图片保存路径
        with open(image_path, 'wb') as f:  # 保存数据
            f.write(image_data)
            print(image_name, '下载成功啦!!!')
            f.close()
        n += 1
    pn += 29
登入後複製
###運行結果如下:##################朋友提示###:### ①:一頁是30張### ②:輸入的內容可以很多變:例如橋、月亮、太陽、胡歌、趙麗穎等等。 #########四、Blogger’s speech#########希望大家可以,按讚、追蹤、收藏,三連支持一下! ###

大量免費學習推薦,請造訪python教學(影片)

#

以上是python爬蟲:隨心所欲地爬取百度圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!