天天看點

50行Python代碼爬取黑絲美眉純欲高清圖

要說最美好的欲望莫過于看黑絲美眉。

一、技術路線

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) AppleWebKit/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,這就是縮略圖啊,不清晰,果斷舍棄。。。

50行Python代碼爬取黑絲美眉純欲高清圖
50行Python代碼爬取黑絲美眉純欲高清圖

沒有辦法,隻有點選找到詳情頁連結,再進行單獨爬取。

空白右鍵,檢視頁面源代碼,把剛剛複制的縮略圖連結複制查找快速定位,分析所有圖檔詳情頁連結存在div标簽,并且class=‘list’ 唯一,是以可以使用BeautifulSoup提取此标簽。并且發現圖檔詳情頁連結在herf=後面(同時我們注意到有部分無效連結也在div标簽中,觀察它們異同,發現無效連結存在'https'字樣,是以可在代碼中依據此排出無效連結,對應第4條中的函數代碼),隻需提取出來再在前面加上網頁首頁連結即可打開,并且右鍵圖檔,‘審查元素’,複制連結下載下傳的圖檔接近1M,表示是高清圖檔了,到這一步我們隻需調用下載下傳儲存函數即可儲存圖檔

50行Python代碼爬取黑絲美眉純欲高清圖
50行Python代碼爬取黑絲美眉純欲高清圖

四、網頁詳情頁連結擷取

首要目标是将每頁的每個圖檔的詳情頁連結給爬取下來,為後續的高清圖檔爬取做準備,這裡直接使用定義函數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
複制代碼      

五、依據圖檔連結儲存圖檔

通過上面擷取了每個圖檔的詳情頁連結後,打開,右鍵圖檔審查元素,複制連結即可快速定位,然後儲存圖檔

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頁的連結是

​​www.netbian.com/meinv/​​

第2頁的連結是

​​www.netbian.com/meinv/index…​​

并且後續頁面是在第2頁的基礎上僅改變最後的數字,是以在寫代碼的時候要注意區分第1頁和後續頁面的連結,分别做處理;同時在main()函數還增加了自定義爬取頁數的功能,詳見代碼

50行Python代碼爬取黑絲美眉純欲高清圖
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()函數
複制代碼      
50行Python代碼爬取黑絲美眉純欲高清圖

七、完整代碼

最後再調用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) AppleWebKit/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()
複制代碼      

①兼職交流,行業咨詢、大佬線上專業解答

②Python開發環境安裝教程

③Python400集自學視訊

④軟體開發常用詞彙

⑤Python學習路線圖

⑥3000多本Python電子書