python爬取圖片


1.導入需要的模塊requests,BeautifulSoup,os(用於文件讀寫)。

  2.創建一個類,並初始化。

 
1
2
3
4
5
6
7
8
class BeautifulPicture:
     def __init__( self ):  # 類的初始化操作
         self .headers = {
             # 給請求指定一個請求頭來模擬chrome瀏覽器
             'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64)'
                           ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' }
         self .web_url = 'url'  # 要訪問的網頁地址
         self .folder_path = 'E:\\1\\pic'  # 設置圖片要存放的文件目錄

  3.先請求圖片所在的網頁,返回網頁response

 
1
2
3
def request( self , url):  # 返回網頁response
     r = requests.get(url, self .headers)  # 向目標url地址發送get請求,返回一個response對象
     return r

  調用request方法,print(r.text)就可以看到控制台上print出的網頁源碼了。

  4.通過BeautifulSoup工具獲取需要抓取的img標簽,這里根據不同的網頁布局css選擇器也會有不同:

 
1
2
3
4
5
6
def get_pic( self ):
     r = self .request( self .web_url)
     all_item = BeautifulSoup(r.text, 'html.parser' ).select( ".search_results > .item" )
     for item in all_item:
         img = item.find( 'a' ).find( 'img' )
         url = img[ 'src' ]

  此處,我是先抓取img所在的div(類名為item),再獲取div下的a鏈接下的img,網頁具體代碼格式為

 
1
2
3
4
5
6
7
8
< div class="flex_grid credits search_results" style="margin:4px 14px 0 15px">       
     < div class="item" data-w="640" data-h="256">
         < a href="">
             < img srcset="" src="" alt="">
         </ a >
     </ div >
     ......
</ div >

  通過遍歷可以獲取所有圖片的鏈接。

  5.獲取到圖片地址鏈接后,就可以下載圖片並保存到本地了。那么就需要確認初始化定義的文件夾是否存在,如果不存在,需要創建。

 
1
2
3
4
5
6
7
8
9
def mkdir( self , path):  # 創建文件夾
     path = path.strip()
     is_exists = os.path.exists(path)
     if not is_exists:
         print ( '創建名字叫做' , path, '的文件夾' )
         os.makedirs(path)
         print ( '創建成功!' )
     else :
         print (path, '文件夾已經存在了,不再創建' )

  6.接下來就可以保存圖片了。

  第四步操作,在get_pic方法中,獲取到所有圖片所在的div標簽后,先確保存放圖片的文件下是否存在,調用方法

  self.mkdir(self.folder_path) # 創建文件夾  

  os.chdir(self.folder_path) # 切換路徑至上面創建的文件夾

  遍歷所有的div,根據url名中jpg/png的不同,決定保存圖片的后綴名

 
1
2
3
4
5
6
7
8
9
i = 1  # 后面用來給圖片命名
for item in all_item:
     img = item.find( 'a' ).find( 'img' )
     url = img[ 'src' ]
     if url.count( 'jpg' ) > 0 :
         self .save_img(url, str (i) + '.jpg' )
     elif url.count( 'png' ) > 0 :
         self .save_img(url, str (i) + '.png' )
     i + = 1

  其中save_img方法為:

 
1
2
3
4
5
6
def save_img( self , url, name):  # 保存圖片
     img = self .request(url)
     f = open (name, 'ab' )
     f.write(img.content)
     print (name, '文件保存成功!' )
     f.close()

  創建MyBeautifulPicture類的實例,調用get_pic方法,至此,保存圖片到本地就可以實現了。

  完整的get_pic方法為:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def get_pic( self ):
     r = self .request( self .web_url)
     all_item = BeautifulSoup(r.text, 'html.parser' ).select( ".search_results > .item" )
     self .mkdir( self .folder_path)  # 創建文件夾
     os.chdir( self .folder_path)  # 切換路徑至上面創建的文件夾
     i = 1  # 后面用來給圖片命名
     for item in all_item:
         img = item.find( 'a' ).find( 'img' )
         url = img[ 'src' ]
         # print(url)
         if url.count( 'jpg' ) > 0 :
             self .save_img(url, str (i) + '.jpg' )
         elif url.count( 'png' ) > 0 :
             self .save_img(url, str (i) + '.png' )
         i + = 1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM