日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python下载图片的命令_网上的图片不知道怎么批量下载?python教你怎么把网站上面的图片都爬下来...

發布時間:2023/12/20 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python下载图片的命令_网上的图片不知道怎么批量下载?python教你怎么把网站上面的图片都爬下来... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

妹子圖網站----前言

從今天開始就要擼起袖子,直接寫Python爬蟲了,學習語言最好的辦法就是有目的的進行,所以,接下來我將用10+篇的博客,寫爬圖片這一件事情。希望可以做好。

為了寫好爬蟲,我們需要準備一個火狐瀏覽器,還需要準備抓包工具,抓包工具,我使用的是CentOS自帶的tcpdump,加上wireshark ,這兩款軟件的安裝和使用,建議你還是學習一下,后面我們應該會用到。

妹子圖網站---- 網絡請求模塊requests

Python中的大量開源的模塊使得編碼變的特別簡單,我們寫爬蟲第一個要了解的模塊就是requests。

妹子圖網站---- 安裝requests

打開終端:使用命令

pip3 install requests

等待安裝完畢即可使用

接下來在終端中鍵入如下命令

# mkdir demo

上面的linux命令是 創建一個名稱為demo的文件夾,之后創建一個

為了提高在linux上的開發效率,我們需要安裝一個visual studio code 的開發工具

對于怎么安裝vscode,參考官方的https://code.visualstudio.com... 有詳細的說明。

對于centos則如下:

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

然后用yum命令安裝

yum check-update

安裝成功之后,在你的CentOS中會出現如下畫面

image.png

接著說我們上面的操作 ,因為我們這邊是用gnome圖形界面,所以后面的有些操作,我直接用windows的操作風格講解了

打開軟件>文件>打開文件>找到我們剛剛創建的down.py文件

之后,在VSCODE里面輸入

import requests #導入模塊

tips:本教程不是Python3的基礎入門課,所以有些編碼基礎,默認你懂,比如Python沒有分號結尾,需要對齊格式。我會盡量把注釋寫的完整

按鍵盤上的ctrl+s保存文件,如果提示權限不足,那么按照提示輸入密碼即可

通過終端進入demo目錄,然后輸入

python3 down.py

顯示如下結果,代表編譯沒有問題

[root@bogon demo]# python3 down.py

接下來,我們開始測試requests模塊是否可以使用

修改上述代碼中的

import requests

運行結果(出現下圖代表你運行成功了):

image.png

接下來,我們實際下載一張圖片試試,比如下面這張圖片

image.png

修改代碼,在這之前,我們修改一些內容

由于每次修改文件,都提示必須管理員權限,所以你可以使用linux命令修改權限。

[root@bogon linuxboy]# chmod -R 777 demo/

import requests

運行代碼之后,發現在文件夾內部生成了一個文件

image.png

但是打開文件之后發現,這個文件并不能查閱,這代表這個文件壓根沒有下載下來

image.png

我們繼續修改代碼,因為有的服務器圖片,都做了一些限制,我們可以用瀏覽器打開,但是使用Python代碼并不能完整的下載下來。

修改代碼

import requests

好了,這次在終端編譯一下python文件

python3 down.py

發現圖片下載下來了

image.png

我們重點查看上述代碼中 requests.get部分,添加了一個headers的實參。這樣我們程序就下載下來了完整的圖片。

妹子圖網站---- Python爬蟲頁面分析

有了上面這個簡單的案例,我們接下來的操作就變的簡單多了。爬蟲是如何進行的呢?

輸入域名->下載源代碼->分析圖片路徑->下載圖片

上面就是他的步驟

輸入域名

為啥爬取這個網站,因為好爬。

好了,接下來分析這個頁面

image.png

做爬蟲很重要的一點,就是你要找到分頁的地方,因為有分頁代表著有規律,有規律,我們就好爬了(可以做的更智能一些,輸入首頁網址,爬蟲自己就能分析到這個網站中的所有地址)

上面圖片中,我們發現了分頁,那么找規律吧

image.png

使用火狐瀏覽器的開發者工具,發現分頁規律

http://www.meizitu.com/a/pure_1.html

好了,接下來用Python實現這部分(以下寫法有部分面向對象的寫法,沒有基礎的同學,請百度找些基礎來看,不過對于想學習的你來說,這些簡單極了)

import requests

上面的代碼,可能需要有一定的Python基礎可以看懂,不過你其實仔細看一下,就幾個要點

第一個是 class Spider(): 我們聲明了一個類,然后我們使用 def __init__去聲明一個構造函數,這些我覺得你找個教程30分鐘也就學會了。

拼接URL,我們可以用很多辦法,我這里用的是最直接的,字符串拼接。

注意上述代碼中有一個全局的變量 all_urls 我用它來存儲我們的所有分頁的URL

接下來,是爬蟲最核心的部分代碼了

我們需要分析頁面中的邏輯。首先打開 http://www.meizitu.com/a/pure... ,右鍵審查元素。

image.png

image.png

發現上圖紅色框框里面的鏈接

點擊圖片之后,發現進入一個圖片詳情頁面,發現竟然是一組圖片,那么現在的問題是

這里我們采用多線程的方式爬取(這里還用了一種設計模式,叫觀察者模式)

import threading #多線程模塊

首先引入三個模塊,分別是多線程,正則表達式,時間模塊

新增加一個全局的變量,并且由于是多線程操作,我們需要引入線程鎖

all_img_urls = [] #圖片列表頁面的數組

聲明一個生產者的類,用來不斷的獲取圖片詳情頁地址,然后添加到 all_img_urls 這個全局變量中

#生產者,負責從每個頁面提取圖片列表鏈接

線程鎖,在上面的代碼中,當我們操作all_urls.pop()的時候,我們是不希望其他線程對他進行同時操作的,否則會出現意外,所以我們使用g_lock.acquire()鎖定資源,然后使用完成之后,記住一定要立馬釋放g_lock.release(),否則這個資源就一直被占用著,程序無法進行下去了。

匹配網頁中的URL,我使用的是正則表達式,后面我們會使用其他的辦法,進行匹配。

re.findall()方法是獲取所有匹配到的內容,正則表達式,你可以找一個30分鐘入門的教程,看看就行。

代碼容易出錯的地方,我放到了

try: except: 里面,當然,你也可以自定義錯誤。

如果上面的代碼,都沒有問題,那么我們就可以在程序入口的地方編寫

for x in range(2):

執行程序,因為我們的Producer繼承自threading.Thread類,所以,你必須要實現的一個方法是 def run 這個我相信在上面的代碼中,你已經看到了。然后我們可以執行啦~~~

運行結果:

image.png

這樣,圖片詳情頁面的列表就已經被我們存儲起來了。

接下來,我們需要執行這樣一步操作,我想要等待圖片詳情頁面全部獲取完畢,在進行接下來的分析操作。

這里增加代碼

#threads= []

注釋關鍵代碼,運行如下

[linuxboy@bogon demo]$ python3 down.py

把上面的tt.join等代碼注釋打開

[linuxboy@bogon demo]$ python3 down.py

發現一個本質的區別,就是,我們由于是多線程的程序,所以,當程序跑起來之后,print("進行到我這里了")不會等到其他線程結束,就會運行到,但是當我們改造成上面的代碼之后,也就是加入了關鍵的代碼 tt.join() 那么主線程的代碼會等到所以子線程運行完畢之后,在接著向下運行。這就滿足了,我剛才說的,先獲取到所有的圖片詳情頁面的集合,這一條件了。

join所完成的工作就是線程同步,即主線程遇到join之后進入阻塞狀態,一直等待其他的子線程執行結束之后,主線程在繼續執行。這個大家在以后可能經常會碰到。

下面編寫一個消費者/觀察者,也就是不斷關注剛才我們獲取的那些圖片詳情頁面的數組。

添加一個全局變量,用來存儲獲取到的圖片鏈接

pic_links = [] #圖片地址列表

#消費者

看到沒有,上面的代碼其實和我們剛才寫的極其相似,后面,我會在github上面把這部分代碼修改的更加簡潔一些,不過這才是第二課,后面我們的路長著呢。

代碼中比較重要的一些部分,我已經使用注釋寫好了,大家可以直接參考。大家一定要注意我上面使用了兩個正則表達式,分別用來匹配title和圖片的url這個title是為了后面創建不同的文件夾使用的,所以大家注意吧。

#開啟10個線程去獲取鏈接

運行結果:

[linuxboy@bogon demo]$ python3 down.py

是不是感覺距離成功有進了一大步

接下來就是,我們開篇提到的那個存儲圖片的操作了,還是同樣的步驟,寫一個自定義的類

class DownPic(threading.Thread) :

我們獲取圖片鏈接之后,就需要下載了,我上面的代碼是首先創建了一個之前獲取到title的文件目錄,然后在目錄里面通過下面的代碼,去創建一個文件。

涉及到文件操作,引入一個新的模塊

import os #目錄操作模塊

# 遍歷字典列表

因為我們的圖片鏈接數組,里面存放是的字典格式,也就是下面這種格式

[{"妹子圖1":["http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/01.jpg","http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/02.jpg"."http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/03.jpg"]},{"妹子圖2":["http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/01.jpg","http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/02.jpg"."http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/03.jpg"]},{"妹子圖3":["http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/01.jpg","http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/02.jpg"."http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/03.jpg"]}]

需要先循環第一層,獲取title,創建目錄之后,在循環第二層去下載圖片,代碼中,我們在修改一下,把異常處理添加上。

try:

然后在主程序中編寫代碼

#開啟10個線程保存圖片

運行結果:

[linuxboy@bogon demo]$ python3 down.py

文件目錄下面同時出現

image.png

點開一個目錄

image.png

好了,今天的一個簡單的爬蟲成了

最后我們在代碼的頭部寫上

# -*- coding: UTF-8 -*-

推薦一下我建的python學習交流qun:850973621,群里有項目源碼分享,開發工具、

電子書籍、免費的視頻教程分享??梢约尤胍黄鸾涣鲗W習,一起進步!

學習資料

總結

以上是生活随笔為你收集整理的python下载图片的命令_网上的图片不知道怎么批量下载?python教你怎么把网站上面的图片都爬下来...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。