目錄
- 一、技術路線
- 二、獲取網頁信息
- 三、網頁爬取分析
- 四、網頁詳情頁鏈接獲取
- 五、依據圖片鏈接保存圖片
- 六、main()函數
- 七、完整程式碼
一、技術路線
requests:網頁請求
BeautifulSoup:解析html網頁
re:正則表達式,提取html網頁信息
os:保存档案
import re import requests import os from bs4 import BeautifulSoup
二、獲取網頁信息
常規操作,獲取網頁信息的固定格式,返回的字符串格式的網頁內容,其中headers參數可模擬人為的操作,‘欺騙’網站不被發現
def getHtml(url): #固定格式,獲取html內容 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 蘋果WebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' } #模擬用戶操作 try: r = requests.get(url, headers=headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: print('網絡狀態錯誤')
三、網頁爬取分析
右鍵單擊圖片區域,選擇 ‘審查元素’ ,可以查看當前網頁圖片詳情鏈接,我就滿心歡喜的復制鏈接打開保存,看看效果,結果一張圖片隻有60幾kb,這就是縮略圖啊,不清晰,果斷舍棄。。。
沒有辦法,隻有點擊找到詳情頁鏈接,再進行單獨爬取。
空白右鍵,‘查看頁面源程式碼’,把剛剛復制的縮略圖鏈接復制查找快速定位,分析所有圖片詳情頁鏈接存在div標簽,並且class=‘list’ 唯一,因此可以使用BeautifulSoup提取此標簽。並且發現圖片詳情頁鏈接在herf=後面(同時我們註意到有部分無效鏈接也在div標簽中,觀察它們異同,發現無效鏈接存在’https’字樣,因此可在程式碼中依據此排出無效鏈接,對應第4條中的函數程式碼),隻需提取出來再在前面加上網頁首頁鏈接即可打開,並且右鍵圖片,‘審查元素’,復制鏈接下載的圖片接近1M,表示是高清圖片瞭,到這一步我們隻需調用下載保存函數即可保存圖片
四、網頁詳情頁鏈接獲取
根據第3條分析的情況,首要目標是將每頁的每個圖片的詳情頁鏈接給爬取下來,為後續的高清圖片爬取做準備,這裡直接定義函數def getUrlList(url):
def getUrlList(url): # 獲取圖片鏈接 url_list = [] #存儲每張圖片的url,用於後續內容爬取 demo = getHtml(url) soup = BeautifulSoup(demo,'html.parser') sp = soup.find_all('div', class_="list") #class='list'在全文唯一,因此作為錨,獲取唯一的div標簽;註意,這裡的網頁源程式碼是class,但是python為瞭和class(類)做區分,在最後面添加瞭_ nls = re.findall(r'a href="(.*?)" rel="external nofollow" rel="external nofollow" ', str(sp)) #用正則表達式提取鏈接 for i in nls: if 'https' in i: #因所有無效鏈接中均含有'https'字符串,因此直接剔除無效鏈接(對應第3條的分析) continue url_list.append('http://www.netbian.com' + i) #在獲取的鏈接中添加前綴,形成完整的有效鏈接 return url_list
五、依據圖片鏈接保存圖片
同理,在第4條中獲取瞭每個圖片的詳情頁鏈接後,打開,右鍵圖片’審查元素’,復制鏈接即可快速定位,然後保存圖片
def fillPic(url,page): pic_url = getUrlList(url) #調用函數,獲取當前頁的所有圖片詳情頁鏈接 path = './美女' # 保存路徑 for p in range(len(pic_url)): pic = getHtml(pic_url[p]) soup = BeautifulSoup(pic, 'html.parser') psoup = soup.find('div', class_="pic") #class_="pic"作為錨,獲取唯一div標簽;註意,這裡的網頁源程式碼是class,但是python為瞭和class(類)做區分,在最後面添加瞭_ picUrl = re.findall(r'src="(.*?)"', str(psoup))[0] #利用正則表達式獲取詳情圖片鏈接,因為這裡返回的是列表形式,所以取第一個元素(隻有一個元素,就不用遍歷的方式瞭) pic = requests.get(picUrl).content #打開圖片鏈接,並以二進制形式返回(圖片,聲音,視頻等要以二進制形式打開) image_name ='美女' + '第{}頁'.format(page) + str(p+1) + '.jpg' #給圖片預定名字 image_path = path + '/' + image_name #定義圖片保存的地址 with open(image_path, 'wb') as f: #保存圖片 f.write(pic) print(image_name, '下載完畢!!!')
六、main()函數
經過前面的主體框架搭建完畢之後,對整個程式做一個前置化,直接上程式碼
在這裡第1頁的鏈接是http://www.netbian.com/meinv/
第2頁的鏈接是http://www.netbian.com/meinv/index_2.htm
並且後續頁面是在第2頁的基礎上僅改變最後的數字,因此在寫程式碼的時候要註意區分第1頁和後續頁面的鏈接,分別做處理;同時在main()函數還增加瞭自定義爬取頁數的功能,詳見程式碼
def main(): n = input('請輸入要爬取的頁數:') url = 'http://www.netbian.com/meinv/' # 資源的首頁,可根據自己的需求查看不同分類,自定義改變目錄,爬取相應資源 if not os.path.exists('./美女'): # 如果不存在,創建档案目錄 os.mkdir('./美女/') page = 1 fillPic(url, page) # 爬取第一頁,因為第1頁和後續頁的鏈接的區別,單獨處理第一頁的爬取 if int(n) >= 2: #爬取第2頁之後的資源 ls = list(range(2, 1 + int(n))) url = 'http://www.netbian.com/meinv/' for i in ls: #用遍歷的方法對輸入的需求爬取的頁面做分別爬取處理 page = str(i) url_page = 'http://www.netbian.com/meinv/' url_page += 'index_' + page + '.htm' #獲取第2頁後的每頁的詳情鏈接 fillPic(url, page) #調用fillPic()函數
七、完整程式碼
最後再調用main(),輸入需要爬取的頁數,即可開始爬取,完整程式碼如下
import re import requests import os from bs4 import BeautifulSoup def getHtml(url): #固定格式,獲取html內容 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 蘋果WebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' } #模擬用戶操作 try: r = requests.get(url, headers=headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: print('網絡狀態錯誤') def getUrlList(url): # 獲取圖片鏈接 url_list = [] #存儲每張圖片的url,用於後續內容爬取 demo = getHtml(url) soup = BeautifulSoup(demo,'html.parser') sp = soup.find_all('div', class_="list") #class='list'在全文唯一,因此作為錨,獲取唯一的div標簽;註意,這裡的網頁源程式碼是class,但是python為瞭和class(類)做區分,在最後面添加瞭_ nls = re.findall(r'a href="(.*?)" rel="external nofollow" rel="external nofollow" ', str(sp)) #用正則表達式提取鏈接 for i in nls: if 'https' in i: #因所有無效鏈接中均含有'https'字符串,因此直接剔除無效鏈接(對應第3條的分析) continue url_list.append('http://www.netbian.com' + i) #在獲取的鏈接中添加前綴,形成完整的有效鏈接 return url_list def fillPic(url,page): pic_url = getUrlList(url) #調用函數,獲取當前頁的所有圖片詳情頁鏈接 path = './美女' # 保存路徑 for p in range(len(pic_url)): pic = getHtml(pic_url[p]) soup = BeautifulSoup(pic, 'html.parser') psoup = soup.find('div', class_="pic") #class_="pic"作為錨,獲取唯一div標簽;註意,這裡的網頁源程式碼是class,但是python為瞭和class(類)做區分,在最後面添加瞭_ picUrl = re.findall(r'src="(.*?)"', str(psoup))[0] #利用正則表達式獲取詳情圖片鏈接,因為這裡返回的是列表形式,所以取第一個元素(隻有一個元素,就不用遍歷的方式瞭) pic = requests.get(picUrl).content #打開圖片鏈接,並以二進制形式返回(圖片,聲音,視頻等要以二進制形式打開) image_name ='美女' + '第{}頁'.format(page) + str(p+1) + '.jpg' #給圖片預定名字 image_path = path + '/' + image_name #定義圖片保存的地址 with open(image_path, 'wb') as f: #保存圖片 f.write(pic) print(image_name, '下載完畢!!!') def main(): n = input('請輸入要爬取的頁數:') url = 'http://www.netbian.com/meinv/' # 資源的首頁,可根據自己的需求查看不同分類,自定義改變目錄,爬取相應資源 if not os.path.exists('./美女'): # 如果不存在,創建档案目錄 os.mkdir('./美女/') page = 1 fillPic(url, page) # 爬取第一頁,因為第1頁和後續頁的鏈接的區別,單獨處理第一頁的爬取 if int(n) >= 2: #爬取第2頁之後的資源 ls = list(range(2, 1 + int(n))) url = 'http://www.netbian.com/meinv/' for i in ls: #用遍歷的方法對輸入的需求爬取的頁面做分別爬取處理 page = str(i) url_page = 'http://www.netbian.com/meinv/' url_page += 'index_' + page + '.htm' #獲取第2頁後的每頁的詳情鏈接 fillPic(url_page, page) #調用fillPic()函數 main()
到此這篇關於隻用50行Python程式碼爬取網絡美女高清圖片的文章就介紹到這瞭,更多相關Python爬取圖片內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支援!
You may also like
相关贴文:
近期文章
- 創建一個用於技術和電子產品的WooCommerce網站 – 免費WordPress教程第2部分
- 🛒初學者完整的WooCommerce教程🌟-步驟-2025(最佳電子商務💰教程)
- 。 WordPress + WooCommerce
- 如何為Google Ads Lead創建WooCommerce客戶(在印地語)| Google廣告WOOCommerce
- 如何為WooCommerce商店創建競選橫幅或特殊日期優惠
- WooCommerce Cart Page自定義教程(逐步)
- 如何在WordPress WooCommerce中更改徽標| advaxe
- 如何在WordPress中管理轉售商網站| WooCommerce | advaxe
- cómocrear una tienda在線en wordpress y woocommerce 2025
發佈留言