国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

這篇具有很好參考價值的文章主要介紹了Python爬蟲系列(二)——Python爬蟲批量下載百度圖片。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 前言

先貼代碼

# -*- coding:utf8 -*-
import requests
import json
from urllib import parse
import os
import time


class BaiduImageSpider(object):
    def __init__(self):
        self.json_count = 0  # 請求到的json文件數(shù)量(一個json文件包含30個圖像文件)
        self.url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=5179920884740494226&ipn=rj&ct' \
                   '=201326592&is=&fp=result&queryWord={' \
                   '}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word={' \
                   '}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&pn={' \
                   '}&rn=30&gsm=1e&1635054081427= '
        self.directory = r"C:\Users\cun\Pictures\download\{}"  # 存儲目錄  這里需要修改為自己希望保存的目錄  {}不要丟
        self.header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30 '
        }

    # 創(chuàng)建存儲文件夾
    def create_directory(self, name):
        self.directory = self.directory.format(name)
        # 如果目錄不存在則創(chuàng)建
        if not os.path.exists(self.directory):
            os.makedirs(self.directory)
        self.directory += r'\{}'

    # 獲取圖像鏈接
    def get_image_link(self, url):
        list_image_link = []
        strhtml = requests.get(url, headers=self.header)  # Get方式獲取網(wǎng)頁數(shù)據(jù)
        jsonInfo = json.loads(strhtml.text)
        for index in range(30):
            list_image_link.append(jsonInfo['data'][index]['thumbURL'])
        return list_image_link

    # 下載圖片
    def save_image(self, img_link, filename):
        res = requests.get(img_link, headers=self.header)
        if res.status_code == 404:
            print(f"圖片{img_link}下載出錯------->")
        with open(filename, "wb") as f:
            f.write(res.content)
            print("存儲路徑:" + filename)

    # 入口函數(shù)
    def run(self):
        searchName = input("查詢內(nèi)容:")
        searchName_parse = parse.quote(searchName)  # 編碼

        self.create_directory(searchName)

        pic_number = 0  # 圖像數(shù)量
        for index in range(self.json_count):
            pn = (index+1)*30
            request_url = self.url.format(searchName_parse, searchName_parse, str(pn))
            list_image_link = self.get_image_link(request_url)
            for link in list_image_link:
                pic_number += 1
                self.save_image(link, self.directory.format(str(pic_number)+'.jpg'))
                time.sleep(0.2)  # 休眠0.2秒,防止封ip
        print(searchName+"----圖像下載完成--------->")


if __name__ == '__main__':
    spider = BaiduImageSpider()
    spider.json_count = 10   # 定義下載10組圖像,也就是三百張
    spider.run()

如果要使用上述程序的話,需要修改兩個地方

  • self.directory 這是本地存儲地址,修改為自己電腦的地址,另外,**{}**不要刪
  • spider.json_count = 10 這是下載的圖像組數(shù),一組有30張圖像,10組就是三百張,根據(jù)需求下載

也可以去gitee倉庫直接下載程序。

關(guān)于python爬蟲入門,如何查看網(wǎng)頁源碼,可以參考我的另一篇文章 點擊跳轉(zhuǎn)

2. Python爬蟲批量下載百度圖片

流程:先分析頁面,然后寫爬蟲程序。

打開“百度圖片”,隨便搜索一個詞匯,例如玫瑰,可以查詢到相關(guān)的圖片

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

  1. 分析頁面

點擊鼠標右鍵–>檢查–元素,先找到第一層div

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

然后往下找,可以找到一堆li,也就是以列表排列的元素,經(jīng)研究發(fā)現(xiàn),每個li代表一個模塊,每個模塊包含圖像和下面的字,實際上,下面的字也帶有相應(yīng)鏈接,點擊可以跳轉(zhuǎn)到新頁面。

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

可以先數(shù)一下,包含前面的廣告圖片,總共也就二十多個li,也就是只包含了二十多張圖像。

根據(jù)使用經(jīng)驗來看,鼠標滾輪下滾,會看到源源不斷的圖像,并不局限于二十多張圖像,那么我們先下滾鼠標滾輪,看看會發(fā)生什么。(此時只有一個類名為“imgpage”的div

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

鼠標滾輪下滾,類名為“imgpage”的div增加了很多,繼續(xù)下滾,還會繼續(xù)增加。

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

由此可以得出一個結(jié)論,“百度圖片”初始只會渲染部分圖像到頁面上,隨著滾輪下滾,就會請求新的數(shù)據(jù)。而請求數(shù)據(jù),就可以在“網(wǎng)絡(luò)“中獲取請求信息,

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

打開”網(wǎng)絡(luò)“,可以發(fā)現(xiàn)請求的數(shù)據(jù)非常非常多,而我們只想找剛剛請求的圖像數(shù)據(jù)。

這里再了解一個新技術(shù)–XHR,關(guān)于XHR,推薦一篇文章XHR-點擊跳轉(zhuǎn),簡單來說,在XHR之前,網(wǎng)頁要獲取客戶端和服務(wù)器的任何狀態(tài)更新,都需要刷新一次,而XHR可以不用刷新就請求到新的數(shù)據(jù)。剛才的下滾鼠標滾輪并沒有刷新界面信息。

打開”網(wǎng)絡(luò)“中的【XHR】,這里的數(shù)據(jù)都是通過XHR請求到的,通過名稱可以初步判斷出,請求到的文件是json格式的。

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

隨便點開一個文件,查看請求的url,可以發(fā)現(xiàn),url很長

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

比對以下不同文件的請求url,可以發(fā)現(xiàn)兩個【pn】和【gsm】不同(gsm可以不用管它,這是通信系統(tǒng))

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

對比多個文件,可以看到特點:

  • pn:30
  • pn:60
  • pn:90
  • ……

下滾鼠標滾輪,會添加一個新的json文件,實際上,pn表示一組數(shù)據(jù),一組數(shù)據(jù)包含30個圖像內(nèi)容,也就是第一次請求會得到30個圖像,再次請求會得到另外30個圖像。

現(xiàn)在已經(jīng)分析出查詢同種類型圖像的url特點,那么不同類型的請求url呢?

這里又查詢了一下”向日葵“,,pn也是按30、60、90進行排列的。對比”玫瑰“和”向日葵“的請求url,不同的屬性增加了【logid】、【queryWord】、【word】,而【queryWord】和【word】的信息是相同的,通過名稱可以看出,【queryWord】和【word】代表的是查詢信息。

queryWord=%E5%90%91%E6%97%A5%E8%91%B5

這后面的信息是編碼后的查詢數(shù)據(jù),至于為什么編碼,是因為URL只支持一部分ASCII編碼,而中文內(nèi)容需要進行編碼,才能用于url

使用在線URL編碼工具嘗試編碼”向日葵“,發(fā)現(xiàn)與url使用中的相同

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

到這里,我們可以嘗試一下這個url請求

import requests  # 導入requests包

url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6991546938775238432&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%90%91%E6%97%A5%E8%91%B5&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&word=%E5%90%91%E6%97%A5%E8%91%B5&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&fr=&expermode=&nojc=&pn=30&rn=30&gsm=1e&1635046467636='
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30'}

strhtml = requests.get(url, headers=headers)  # Get方式獲取網(wǎng)頁數(shù)據(jù)
print(strhtml.text)

請求到的數(shù)據(jù)如下圖所示,可以看到返回結(jié)果是json格式的。

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

既然是json格式的,我們也不用BeautifulSoup進行解碼了,直接根據(jù)json格式獲取信息。

import requests  # 導入requests包
import json

url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6991546938775238432&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%90%91%E6%97%A5%E8%91%B5&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&word=%E5%90%91%E6%97%A5%E8%91%B5&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&fr=&expermode=&nojc=&pn=30&rn=30&gsm=1e&1635046467636='
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30'}

strhtml = requests.get(url, headers=headers)  # Get方式獲取網(wǎng)頁數(shù)據(jù)
jsonInfo = json.loads(strhtml.text)
for index in range(30):
    print(jsonInfo['data'][index]['thumbURL'])

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

點擊相應(yīng)的鏈接,可以查詢出相應(yīng)的圖像。

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

  1. 編寫爬蟲程序

經(jīng)過上面分析,基本上有了編寫程序的思路。

  • 獲取請求url
  • 解析出圖像對應(yīng)的url
  • 根據(jù)圖像url下載圖像

根據(jù)設(shè)計思路,編寫爬蟲程序

# -*- coding:utf8 -*-
import requests
import json
from urllib import parse
import os
import time


class BaiduImageSpider(object):
    def __init__(self):
        self.json_count = 0  # 請求到的json文件數(shù)量(一個json文件包含30個圖像文件)
        self.url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=5179920884740494226&ipn=rj&ct' \
                   '=201326592&is=&fp=result&queryWord={' \
                   '}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word={' \
                   '}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&pn={' \
                   '}&rn=30&gsm=1e&1635054081427= '
        self.directory = r"C:\Users\cun\Pictures\download\{}"  # 存儲目錄  這里需要修改為自己希望保存的目錄  {}不要丟
        self.header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30 '
        }

    # 創(chuàng)建存儲文件夾
    def create_directory(self, name):
        self.directory = self.directory.format(name)
        # 如果目錄不存在則創(chuàng)建
        if not os.path.exists(self.directory):
            os.makedirs(self.directory)
        self.directory += r'\{}'

    # 獲取圖像鏈接
    def get_image_link(self, url):
        list_image_link = []
        strhtml = requests.get(url, headers=self.header)  # Get方式獲取網(wǎng)頁數(shù)據(jù)
        jsonInfo = json.loads(strhtml.text)
        for index in range(30):
            list_image_link.append(jsonInfo['data'][index]['thumbURL'])
        return list_image_link

    # 下載圖片
    def save_image(self, img_link, filename):
        res = requests.get(img_link, headers=self.header)
        if res.status_code == 404:
            print(f"圖片{img_link}下載出錯------->")
        with open(filename, "wb") as f:
            f.write(res.content)
            print("存儲路徑:" + filename)

    # 入口函數(shù)
    def run(self):
        searchName = input("查詢內(nèi)容:")
        searchName_parse = parse.quote(searchName)  # 編碼

        self.create_directory(searchName)

        pic_number = 0  # 圖像數(shù)量
        for index in range(self.json_count):
            pn = (index+1)*30
            request_url = self.url.format(searchName_parse, searchName_parse, str(pn))
            list_image_link = self.get_image_link(request_url)
            for link in list_image_link:
                pic_number += 1
                self.save_image(link, self.directory.format(str(pic_number)+'.jpg'))
                time.sleep(0.2)  # 休眠0.2秒,防止封ip
        print(searchName+"----圖像下載完成--------->")


if __name__ == '__main__':
    spider = BaiduImageSpider()
    spider.json_count = 10   # 定義下載10組圖像,也就是三百張
    spider.run()

如果要使用上述程序的話,需要修改兩個地方

  • self.directory 這是本地存儲地址,修改為自己電腦的地址,另外,**{}**不要刪
  • spider.json_count = 10 這是下載的圖像組數(shù),一組有30張圖像,10組就是三百張,根據(jù)需求下載

測試下載3組玫瑰,程序運行情況:

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

下載的玫瑰圖像數(shù)據(jù):

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

10組向日葵圖像:

Python爬蟲系列(二)——Python爬蟲批量下載百度圖片

值得注意的是,下載過程中使用了休眠,這里設(shè)置了下載一張圖像休眠0.2秒,是為了防止查詢過快導致ip地址被封,更進階的做法是添加【代理ip池】

3. 后言

爬蟲還是比較好入門的,這得益于成熟的爬蟲工具。

爬蟲可以滿足自己的個性化搜索需求,快動手試試吧。

如果覺得文章還不錯的話,留個贊再走吧,非常感謝?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-403565.html

到了這里,關(guān)于Python爬蟲系列(二)——Python爬蟲批量下載百度圖片的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Python 實戰(zhàn)】---- 批量識別圖片中的文字,存入excel中【使用百度的通用文字識別】

    【Python 實戰(zhàn)】---- 批量識別圖片中的文字,存入excel中【使用百度的通用文字識別】

    1. 獲取信息圖片示例 2. 運行實例 3. 運行結(jié)果 4. 各個文件的位置 1. 需求分析 識別圖片中的文字【采用百度的通用文字識別】; 文字篩選,按照分類獲取對應(yīng)的文本; 采用 openpyxl 實現(xiàn)將數(shù)據(jù)存入 excel 中。 2. 獲取 access_token 獲取本地緩存的

    2024年02月15日
    瀏覽(33)
  • Python爬蟲實戰(zhàn)-批量爬取下載網(wǎng)易云音樂

    Python爬蟲實戰(zhàn)-批量爬取下載網(wǎng)易云音樂

    大家好,我是python222小鋒老師。前段時間卷了一套? Python3零基礎(chǔ)7天入門實戰(zhàn) https://blog.csdn.net/caoli201314/article/details/132882813 1小時掌握Python操作Mysql數(shù)據(jù)庫之pymysql模塊技術(shù) https://blog.csdn.net/caoli201314/article/details/133199207 一天掌握python爬蟲【基礎(chǔ)篇】 涵蓋 requests、beautifulsoup、se

    2024年02月05日
    瀏覽(96)
  • Python實現(xiàn)批量圖片下載及去重處理

    Python實現(xiàn)批量圖片下載及去重處理

    在爬蟲應(yīng)用開發(fā)中,常常需要批量下載圖片,并對圖片進行去重處理。Python 是一種非常流行的編程語言,也是開發(fā)爬蟲應(yīng)用的首選,本文將介紹如何使用 Python 下載圖片,并對下載的圖片進行去重處理。 首先,我們需要使用 Python 中的 Requests 庫來下載圖片,并使用 OS 庫來創(chuàng)

    2023年04月17日
    瀏覽(21)
  • Python批量爬蟲下載文件——把Excel中的超鏈接快速變成網(wǎng)址

    Python批量爬蟲下載文件——把Excel中的超鏈接快速變成網(wǎng)址

    本文的背景是:大學關(guān)系很好的老師問我能不能把Excel中1000個超鏈接網(wǎng)址對應(yīng)的pdf文檔下載下來。雖然可以手動一個一個點擊下載,但是這樣太費人力和時間了。我想起了之前的爬蟲經(jīng)驗,給老師分析了一下可行性,就動手實踐了。 ?? 沒想到剛開始就遇到了困難,Excel中的

    2024年02月12日
    瀏覽(23)
  • Python 爬蟲網(wǎng)頁圖片下載到本地

    您可以使用Python的requests庫來獲取網(wǎng)頁的源碼,使用BeautifulSoup庫來解析HTML,并使用urllib庫來下載圖片到本地。下面是一個示例代碼: 請注意,上述代碼中的URL和文件名是示例,您需要根據(jù)實際情況進行替換。另外,這段代碼只能下載圖片類型為JPEG的文件,如果想要下載其他

    2024年02月11日
    瀏覽(95)
  • 利用Python中selenium庫爬蟲實現(xiàn)中國裁判文書網(wǎng)自動登錄批量下載功能——最新版詳細教程??!

    利用Python中selenium庫爬蟲實現(xiàn)中國裁判文書網(wǎng)自動登錄批量下載功能——最新版詳細教程??!

    如果電腦上沒有chrome瀏覽器或者當前chrome瀏覽器不是最新版,請先去chrome官網(wǎng)下載安裝最新版chrome瀏覽器 https://www.google.cn/chrome/index.html 什么是ChromeDriver ChromeDriver是一種用于自動化和控制Google Chrome瀏覽器的工具。它是一個開源的項目,由Google維護,并提供給開發(fā)者使用。Ch

    2024年02月04日
    瀏覽(124)
  • python爬蟲練習系列之二:下載B站視頻

    python爬蟲練習系列之二:下載B站視頻

    【思路】 1.下載文件用requests庫最方便,因為可以獲取錯誤碼,可以自定義保存文件名,且不用判斷文件是否已經(jīng)下載完成。 2.解析需要下載的地址,得到視頻和音頻文件下載地址 3.合成視頻和音頻,得到最終mp4文件。 本次涉及視頻操作,故需要安裝如下庫: pip install reque

    2024年02月03日
    瀏覽(20)
  • Python爬蟲:利用JS逆向抓取攜程網(wǎng)景點評論區(qū)圖片的下載鏈接

    Python爬蟲:利用JS逆向抓取攜程網(wǎng)景點評論區(qū)圖片的下載鏈接

    1. 前言 文章內(nèi)容可能存在版權(quán)問題,為此,小編不提供相關(guān)實現(xiàn)代碼,只是從js逆向說一說到底怎樣實現(xiàn)這個的過程,希望能夠幫助到那些正在做js逆向相關(guān)操作的讀者,需要代碼的讀者單獨私信我吧!不過,需要注意的是: 代碼僅供學習,不能用于商業(yè)活動,望讀者切記。

    2024年02月15日
    瀏覽(24)
  • Python爬蟲教程:使用requests、wget和urllib3下載圖片和PDF文件

    Python爬蟲教程:使用requests、wget和urllib3下載圖片和PDF文件

    本文介紹了如何使用Python中的requests、wget和urllib3庫下載圖片和PDF文件,通過示例代碼演示了如何通過Selenium定位文件地址后,使用這三種方法進行文件下載操作。

    2024年02月09日
    瀏覽(26)
  • 百度智能云對象存儲BOS批量下載文件方法

    百度智能云對象存儲BOS批量下載文件方法

    百度智能云對象存儲BOS支持批量打包下載嗎?目前對象存儲BOS瀏覽器端不支持批量下載,可以使用對象存儲BOS桌面或BOSCMD批量下載,也可以使用API/SDK調(diào)用接口循環(huán)下載。新手站長網(wǎng)來詳細說下百度云對象存儲BOS批量下載的方法: 目錄 百度云對象存儲BOS批量下載 BOS桌面客戶端

    2023年04月20日
    瀏覽(40)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包