1. 程式人生 > >[Python]如何簡單的爬取網站上的圖片。

[Python]如何簡單的爬取網站上的圖片。

為了熟練的運用協程,接下來的程式碼將用協程來實現。只是一個簡單的小demo。

import gevent
import urllib.request
import re
from gevent import monkey

monkey.patch_all()


def main():

	web_content = open("./"+"1.txt","rb")
	content = web_content.read().decode("utf-8")

	jpg_lists = re.findall(r"https://.*?\.jpg",content)
	
	list1 = []

	for j in jpg_lists:
		list1.append(gevent.spawn(jpg_downloader,j))

	gevent.joinall(list1)



if __name__ == '__main__':
	main()

在執行前,我將需要爬取圖片的網站的原始碼儲存到了當前資料夾下的1.txt檔案 方便爬取。

接下來,段程式碼,寫了主函式的執行流程。

通過二進位制讀取網站, 然後用正則將圖片地址(即以.jpg結尾的)匹配出來的列表用變數jpg_lists接收。

然後通過遍歷列表,提取出每張圖片的地址。

接下來呼叫協程gevent方法來實現對圖片的下載,如下程式碼:

i = 0
def jpg_downloader(url):
	img = urllib.request.urlopen(url)
	img_content = img.read()
	global i
	i += 1
	with open("./123/"+str(i)+".jpg","wb") as f :
		f.write(img_content)

這裡定義一個全域性變數 i 是為了給圖片取上名字 。

將地址當作引數傳入下載圖片的函式中,請求圖片地址並開啟讀取。將讀取到的內容用img_content接收。

然後申明全域性變數 通過i +=1  來給每一個下載的檔案命名。

建立並用二進位制可寫(wb)開啟一個以 i 為名字的檔案,講讀取到的圖片內容寫入 i 檔案中。

這樣圖片的下載就完成了。 因為只是一個小demo,所以沒有考慮其他因素。

有什麼更好的辦法,希望各位大神多多幫助~~~