[Python]如何簡單的爬取網站上的圖片。
阿新 • • 發佈:2019-02-12
為了熟練的運用協程,接下來的程式碼將用協程來實現。只是一個簡單的小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,所以沒有考慮其他因素。
有什麼更好的辦法,希望各位大神多多幫助~~~