1 前言/
平時我們要下載圖片,要要一個一個點擊下載是不是覺得很麻煩?那有沒有更加簡便的方法呢?答案是肯定的,這里我們以天堂網為例,批量下載天堂網的圖片。
/2 項目準備工作/
首先 我們第一步我們要安裝一個pycham的軟件??梢詤⒖歼@篇文章:Python環境搭建—安利Python小白的Python和Pycharm安裝詳細教程。
天堂網的網址:
https://www.ivsky.com/bizhi/1920x1080/
我們需要下載幾個庫,怎么下載呢?打開pycharm,依次點擊File,再點開Settings,如下圖所示。
打開后會出現這個界面點擊你的項目名字(project:(你的項目名字)),之后在project interpreter下,點擊加號,而后下載我們需要的庫,如下圖所示。
本項目需要用到的是庫是requests、lxml、fake_useragent,如下圖所示。fake_useragent一般是沒有的,需要通過下面的命令進行安裝:
pip install fake_useragent
/3 項目實現/
1、導入需要的庫(requests,lxml, fake_useragent)。
2、我用了封裝方法去實現各個部分的功能。首先要寫一個框架:構造一個類TianTangWebsite ,然后定義一個init方法里繼承(self),再定義一個主方法(main)。最后實現這個main方法,依次一步一步進行實現。
3、我們把天堂網的網址拿過來,構造請求頭。這里說一下這個UserAgent的獲取方法。在打開天堂網的網站后,按下鍵盤上的F12鍵,之后會進入到開發者模式,之后點開network,如下圖所示。
4、而后隨便點擊一個name,復制header里邊的UserAgent就可以了。
5、我們點擊下一頁的地址觀察網址的變化,如下所示:
https://www.ivsky.com/bizhi/1920x1080/index_2.html
https://www.ivsky.com/bizhi/1920x1080/index_3.html
https://www.ivsky.com/bizhi/1920x1080/index_4.html
很明顯的發現,這個網址的網頁數字一直在變化。我們可以用格式化{}去代替變化的值,類似這樣:
https://www.ivsky.com/bizhi/1920x1080/index_{}.html
6、然后我們用for循環去遍歷這些網址,代碼如下所示:
def main(self):
for i in range(1,2):#頁數隨機客戶隨便 設置
url=self.url.format(i)
print(url)
7、我們定義這個get_home()方法去請求到這個網址。
9、我們需要解析得到的數據,接下來定義一個xiap的方法,拿到我們請求的網址。接下來就是該項目的關鍵了。
10、至此,針對反爬蟲的措施我們已經提前做好了準備,下一步將進行網頁結構的分析以及網頁圖片地址數據的提取,并針對解析出來的圖片地址予以批量下載,具體實現咱們下篇文章進行詳解。
/4 小結/
本文主要內容為對圖片網站進行了基本簡介,基于 Python 中的爬蟲庫 requests 、lxml、fake_useragent,提前部署了請求頭,模擬瀏覽器,針對反爬蟲的措施我們已經提前做好了準備。
下篇文章將帶大家進行網頁結構的分析以及網頁圖片地址數據的提取,并針對解析出來的圖片地址予以批量下載,敬請期待~~
往期精彩文章推薦:
想學習更多Python網絡爬蟲與數據挖掘知識,可前往專業網站:http://pdcfighting.com/
代碼演示通過python的requests,BeautifulSoup庫批量下載360圖片,并保存在本機的路徑
代碼如下:
#BeautifulSoup庫是網頁爬蟲解析庫,主要用來對HTML源代碼進行解析,方便顯示并讀取相應的標簽數據 #1、首先導入相應的庫 import requests from bs4 import BeautifulSoup import random import os import time #2、對網站進行get請求 def gethtml(kward): try: url="https://image.so.com" #設置360網站的搜索頁面的前面部分網址 kw={"q":kward} #設置關鍵字變量kw headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"} # 設置網頁請求頭 response = requests.get(url, params=kw,headers=headers) ##偽裝瀏覽器對url進行get請求,傳遞的參數是kw response.encoding=response.apparent_encoding #根據網頁內容解析出編碼格式并賦值給response.encoding html=response.text #將網頁源代碼賦值給html soup=BeautifulSoup(html,'html.parser') #使用html.parser對html代碼進行解析,并賦值給soup變量 print(soup.head) #打印網頁源代碼的頭部信息 images=soup.find_all('img') #查找源代碼里所有的圖片標簽 path="F://明星照片//"+kward+"http://" #設置圖片的存儲本機的路徑 for img in images: #遍歷所有的img標簽信息 print(img.attrs["src"]) #打印遍歷出來的圖片表情的src屬性值 url1=img.attrs["src"] #設置url1為遍歷出來的圖片表情的src屬性值 response1=requests.get(url=url1,headers=headers) #上行代碼偽裝瀏覽器對url1,即圖片網站進行get請求并將請求結果賦值給response1 response1.encoding=response1.apparent_encoding #根據網頁內容解析出編碼格式并賦值給response1.encoding html1=response1.content #將圖片網址的二進制源代碼賦值給html1 abspath=path+str(random.random())+".jpg" #設置存儲路勁為abspath with open(abspath,"wb") as f: #打開文件的絕對路徑,并對文件進行寫入操作,并設置為f f.write(html1) #將源代碼寫入f文件 f.close() #關閉f文件 print(img.attrs["src"]+"下載成功") #打印下載成功的提示 time.sleep(0.2) #設置時間休眠0.2秒 except: #如果接受錯誤時 print("爬取失敗") #打印爬取失敗
代碼運行結果如下圖所示:
、要求:
①使用Python的tkinter創建一個下載器
②下載器需要包含圖片類型輸入框和圖片存儲路徑輸入框
③必須要有下載按鈕和清空按鈕,并執行相應的下載圖片和清空輸入信息的操作
二、代碼如下:
import tkinter
import tkinter as tk
import requests
import time
from lxml import etree
import os
import re
root=tk.Tk()
root.geometry('800x600')
root.title('下載https://www.16pic.com/圖片')
l1=tk.Label(root,text='1、請輸入圖片類型:')
l1.place(x=30,y=10)
v1=tk.StringVar()
e1=tk.Entry(root,textvariable=v1,width=50)
e1.place(x=180,y=10)
l2=tk.Label(root,text='2、請輸入圖片存儲路徑:')
l2.place(x=30,y=30)
v2=tk.StringVar()
e2=tk.Entry(root,textvariable=v2,width=50)
e2.place(x=180,y=30)
e2.insert('end','F:\images')
e3=tk.Text(root,width=200,height=100)
e3.place(x=30,y=100)
global headers
headers={"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.3"}
def download(url,path):
response2=requests.get(url=url,headers=headers)
content=response2.content
i=1
today=time.localtime()
filename=str(today)+str(i)+'.jpg'
with open(os.path.join(path,filename),'wb') as f:
f.write(content)
print("{}下載完成".format(url))
def submit():
kw=e1.get()
url='https://www.16pic.com/sucai/tupian_{}_0-0-0-0-0-0-0-0-0_1.html'.format(kw)
response=requests.get(url=url,headers=headers)
response.encoding='utf-8'
text=response.text
img_list=re.findall(r'<img src="(.*?)"',text)
for image in img_list:
image=image.split('?')
image=image[0]
if '.jpg' in image:
image_result='http:'+image
# print(image_result)
download(image_result, v2.get())
e3.insert('end', image_result+"下載完成")
e3.insert('end','\n')
submit_button=tk.Button(root,text='開始下載',command=submit)
submit_button.place(x=30,y=60)
def clear():
v1.set('')
v2.set('')
e3.delete(1.0,tkinter.END)
clear_button=tk.Button(root,text='清空',command=clear)
clear_button.place(x=200,y=60)
root.mainloop()
三、使用Pyinstaller命令生成可執行文件運行結果如下圖所示:
四、代碼運行結果如下圖所示:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。