1.導入需要的模塊requests,BeautifulSoup,os(用於文件讀寫)。
2.創建一個類,並初始化。
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
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選擇器也會有不同:
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,網頁具體代碼格式為
<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.獲取到圖片地址鏈接后,就可以下載圖片並保存到本地了。那么就需要確認初始化定義的文件夾是否存在,如果不存在,需要創建。
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的不同,決定保存圖片的后綴名
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方法為:
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方法為:
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
