1、首先導入相關庫
import requests import bs4 import threading #用於多線程爬蟲,爬取速度快,可以完成多頁爬取 import os
2、使用bs4獲取html中的內容
所爬取的網站:http://www.umei.cc/bizhitupian/diannaobizhi/1.htm 這只是第一頁中的圖片當然可以批量爬取里面所有的圖片
bs = bs4.BeautifulSoup(requests.get(r"http://www.umei.cc/bizhitupian/diannaobizhi/1.htm").text)
到這一步我們就已經拿到了該頁面的HTML了,發現輸出的HTML有點亂碼,這時我們可以改良一下我們的代碼
import bs4 import requests import os req = requests.get(r"http://www.umei.cc/bizhitupian/diannaobizhi/1.htm") req.encoding="utf-8" bs = bs4.BeautifulSoup(req.text)
這樣可以解決爬取出來的HTML亂碼的問題
3、拿到HTML后就進行匹配我們所需要的圖片標簽
obj = bs.find_all("a",{"class":{"TypeBigPics"}}) #a代表的是<a>標簽 class是<a>標簽中所對應的class TypeBigPics為<a>標簽中class中對應的值,根據class中的值找出對應圖片的<a>標簽
這時就拿到了圖片所對應的所有的<a>標簽 find_all()取去出所有匹配的對象,find()則是取出一條
4、接着取出<a>標簽里面的所有img標簽
imgObj=[] #用於存儲img對象 for s in obj: imgObj.append(s.find("img")) #把取出的img對象存入imgObj數組中
5、接着獲取img標簽中src中的值
srcObj=[] #用於存儲圖片src對象for o in imgObj: srcObj.append(o.get("src"))
這時我們就得到了網頁上所有圖片的文件路徑,下一步就可以進行下載這些圖片了
6、下載圖片
for img in srcObj: with open("D:\\Images\\"+os.path.basename(img),'wb') as f: f.write(requests.get(img).content) print(os.path.basename(img)+"保存成功")
srcObj為上面所拿到的圖片地址,D:\\Images\\為本地保存目錄 注意:要用雙斜杠 os.path.basename(img)為圖片原文件名 也可替換成自己設置文件名 到這里簡單的爬蟲就已經結束了
7、全部代碼如下
import bs4 import requests import os req = requests.get(r"http://www.umei.cc/bizhitupian/diannaobizhi/1.htm") req.encoding="utf-8" bs = bs4.BeautifulSoup(req.text) obj = bs.find_all("a",{"class":{"TypeBigPics"}}) objHtml=[] objImg=[] for s in obj: objHtml.append(s.find("img")) for o in objHtml: objImg.append(o.get("src")) for img in objImg: with open("D:\\pics22223\\"+os.path.basename(img),'wb') as f: f.write(requests.get(img).content) print(os.path.basename(img)+"保存成功");
8、使用多線程爬取此站所有的圖片
這里就直接上源碼了
import bs4 import requests import os
import threading def ojue(i): bs = bs4.BeautifulSoup(requests.get(r"http://www.umei.cc/bizhitupian/diannaobizhi/"+i+".htm").text) obj = bs.find_all("a",{"class":{"TypeBigPics"}}) objHtml=[] ImgObj=[] for f in obj: objHtml.append(f.get("href")) for z in objHtml: htmlText = bs4.BeautifulSoup(requests.get(z).text) Img = htmlText.find_all("img") for c in Img: ImgObj.append(c.get("src")) for img in ImgObj: with open("D:\\pics22223\\"+os.path.basename(img),'wb') as f: f.write(requests.get(img).content) print(os.path.basename(img)+"保存成功")
for i in range(627): #range()從0開始取到627 threading.Thread(target=ojue,args=(i+1,)).start() #target 參數是對應的函數名稱