濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > 只用50行Python代碼爬取網(wǎng)絡(luò)美女高清圖片

只用50行Python代碼爬取網(wǎng)絡(luò)美女高清圖片

熱門標(biāo)簽:所得系統(tǒng)電梯怎樣主板設(shè)置外呼 市場(chǎng)上的電銷機(jī)器人 北京電銷外呼系統(tǒng)加盟 地圖標(biāo)注面積 北瀚ai電銷機(jī)器人官網(wǎng)手機(jī)版 小蘇云呼電話機(jī)器人 佛山400電話辦理 朝陽手機(jī)外呼系統(tǒng) 儋州電話機(jī)器人

一、技術(shù)路線

requests:網(wǎng)頁請(qǐng)求
BeautifulSoup:解析html網(wǎng)頁
re:正則表達(dá)式,提取html網(wǎng)頁信息
os:保存文件

import re
import requests
import os
from bs4 import BeautifulSoup

二、獲取網(wǎng)頁信息

常規(guī)操作,獲取網(wǎng)頁信息的固定格式,返回的字符串格式的網(wǎng)頁內(nèi)容,其中headers參數(shù)可模擬人為的操作,‘欺騙'網(wǎng)站不被發(fā)現(xiàn)

def getHtml(url):  #固定格式,獲取html內(nèi)容
    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('網(wǎng)絡(luò)狀態(tài)錯(cuò)誤')

三、網(wǎng)頁爬取分析

右鍵單擊圖片區(qū)域,選擇 ‘審查元素' ,可以查看當(dāng)前網(wǎng)頁圖片詳情鏈接,我就滿心歡喜的復(fù)制鏈接打開保存,看看效果,結(jié)果一張圖片只有60幾kb,這就是縮略圖啊,不清晰,果斷舍棄。。。


沒有辦法,只有點(diǎn)擊找到詳情頁鏈接,再進(jìn)行單獨(dú)爬取。

空白右鍵,‘查看頁面源代碼',把剛剛復(fù)制的縮略圖鏈接復(fù)制查找快速定位,分析所有圖片詳情頁鏈接存在div標(biāo)簽,并且class=‘list' 唯一,因此可以使用BeautifulSoup提取此標(biāo)簽。并且發(fā)現(xiàn)圖片詳情頁鏈接在herf=后面(同時(shí)我們注意到有部分無效鏈接也在div標(biāo)簽中,觀察它們異同,發(fā)現(xiàn)無效鏈接存在'https'字樣,因此可在代碼中依據(jù)此排出無效鏈接,對(duì)應(yīng)第4條中的函數(shù)代碼),只需提取出來再在前面加上網(wǎng)頁首頁鏈接即可打開,并且右鍵圖片,‘審查元素',復(fù)制鏈接下載的圖片接近1M,表示是高清圖片了,到這一步我們只需調(diào)用下載保存函數(shù)即可保存圖片

四、網(wǎng)頁詳情頁鏈接獲取

根據(jù)第3條分析的情況,首要目標(biāo)是將每頁的每個(gè)圖片的詳情頁鏈接給爬取下來,為后續(xù)的高清圖片爬取做準(zhǔn)備,這里直接定義函數(shù)def getUrlList(url):

def getUrlList(url):  # 獲取圖片鏈接
    url_list = []  #存儲(chǔ)每張圖片的url,用于后續(xù)內(nèi)容爬取
    demo = getHtml(url)
    soup = BeautifulSoup(demo,'html.parser')
    sp = soup.find_all('div', class_="list") #class='list'在全文唯一,因此作為錨,獲取唯一的div標(biāo)簽;注意,這里的網(wǎng)頁源代碼是class,但是python為了和class(類)做區(qū)分,在最后面添加了_
    nls = re.findall(r'a href="(.*?)" rel="external nofollow"  rel="external nofollow" ', str(sp)) #用正則表達(dá)式提取鏈接
    for i in nls:
        if 'https' in i: #因所有無效鏈接中均含有'https'字符串,因此直接剔除無效鏈接(對(duì)應(yīng)第3條的分析)
            continue
        url_list.append('http://www.netbian.com' + i) #在獲取的鏈接中添加前綴,形成完整的有效鏈接
    return url_list

五、依據(jù)圖片鏈接保存圖片

同理,在第4條中獲取了每個(gè)圖片的詳情頁鏈接后,打開,右鍵圖片'審查元素',復(fù)制鏈接即可快速定位,然后保存圖片

def fillPic(url,page):
    pic_url = getUrlList(url) #調(diào)用函數(shù),獲取當(dāng)前頁的所有圖片詳情頁鏈接
    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標(biāo)簽;注意,這里的網(wǎng)頁源代碼是class,但是python為了和class(類)做區(qū)分,在最后面添加了_
        picUrl = re.findall(r'src="(.*?)"', str(psoup))[0] #利用正則表達(dá)式獲取詳情圖片鏈接,因?yàn)檫@里返回的是列表形式,所以取第一個(gè)元素(只有一個(gè)元素,就不用遍歷的方式了)
        pic = requests.get(picUrl).content #打開圖片鏈接,并以二進(jìn)制形式返回(圖片,聲音,視頻等要以二進(jìn)制形式打開)
        image_name ='美女' + '第{}頁'.format(page) + str(p+1) + '.jpg' #給圖片預(yù)定名字
        image_path = path + '/' + image_name #定義圖片保存的地址
        with open(image_path, 'wb') as f: #保存圖片
            f.write(pic)
            print(image_name, '下載完畢?。。?)

六、main()函數(shù)

經(jīng)過前面的主體框架搭建完畢之后,對(duì)整個(gè)程序做一個(gè)前置化,直接上代碼

在這里第1頁的鏈接是http://www.netbian.com/meinv/

第2頁的鏈接是http://www.netbian.com/meinv/index_2.htm

并且后續(xù)頁面是在第2頁的基礎(chǔ)上僅改變最后的數(shù)字,因此在寫代碼的時(shí)候要注意區(qū)分第1頁和后續(xù)頁面的鏈接,分別做處理;同時(shí)在main()函數(shù)還增加了自定義爬取頁數(shù)的功能,詳見代碼

def main():
    n = input('請(qǐng)輸入要爬取的頁數(shù):')
    url = 'http://www.netbian.com/meinv/'  # 資源的首頁,可根據(jù)自己的需求查看不同分類,自定義改變目錄,爬取相應(yīng)資源
    if not os.path.exists('./美女'):  # 如果不存在,創(chuàng)建文件目錄
        os.mkdir('./美女/')
    page = 1
    fillPic(url, page)  # 爬取第一頁,因?yàn)榈?頁和后續(xù)頁的鏈接的區(qū)別,單獨(dú)處理第一頁的爬取
    if int(n) >= 2: #爬取第2頁之后的資源
        ls = list(range(2, 1 + int(n)))
        url = 'http://www.netbian.com/meinv/'
        for i in ls: #用遍歷的方法對(duì)輸入的需求爬取的頁面做分別爬取處理
            page = str(i)
            url_page = 'http://www.netbian.com/meinv/'
            url_page += 'index_' + page + '.htm' #獲取第2頁后的每頁的詳情鏈接
            fillPic(url, page) #調(diào)用fillPic()函數(shù)

七、完整代碼

最后再調(diào)用main(),輸入需要爬取的頁數(shù),即可開始爬取,完整代碼如下

import re
import requests
import os
from bs4 import BeautifulSoup

def getHtml(url):  #固定格式,獲取html內(nèi)容
    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('網(wǎng)絡(luò)狀態(tài)錯(cuò)誤')

def getUrlList(url):  # 獲取圖片鏈接
    url_list = []  #存儲(chǔ)每張圖片的url,用于后續(xù)內(nèi)容爬取
    demo = getHtml(url)
    soup = BeautifulSoup(demo,'html.parser')
    sp = soup.find_all('div', class_="list") #class='list'在全文唯一,因此作為錨,獲取唯一的div標(biāo)簽;注意,這里的網(wǎng)頁源代碼是class,但是python為了和class(類)做區(qū)分,在最后面添加了_
    nls = re.findall(r'a href="(.*?)" rel="external nofollow"  rel="external nofollow" ', str(sp)) #用正則表達(dá)式提取鏈接
    for i in nls:
        if 'https' in i: #因所有無效鏈接中均含有'https'字符串,因此直接剔除無效鏈接(對(duì)應(yīng)第3條的分析)
            continue
        url_list.append('http://www.netbian.com' + i) #在獲取的鏈接中添加前綴,形成完整的有效鏈接
    return url_list

def fillPic(url,page):
    pic_url = getUrlList(url) #調(diào)用函數(shù),獲取當(dāng)前頁的所有圖片詳情頁鏈接
    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標(biāo)簽;注意,這里的網(wǎng)頁源代碼是class,但是python為了和class(類)做區(qū)分,在最后面添加了_
        picUrl = re.findall(r'src="(.*?)"', str(psoup))[0] #利用正則表達(dá)式獲取詳情圖片鏈接,因?yàn)檫@里返回的是列表形式,所以取第一個(gè)元素(只有一個(gè)元素,就不用遍歷的方式了)
        pic = requests.get(picUrl).content #打開圖片鏈接,并以二進(jìn)制形式返回(圖片,聲音,視頻等要以二進(jìn)制形式打開)
        image_name ='美女' + '第{}頁'.format(page) + str(p+1) + '.jpg' #給圖片預(yù)定名字
        image_path = path + '/' + image_name #定義圖片保存的地址
        with open(image_path, 'wb') as f: #保存圖片
            f.write(pic)
            print(image_name, '下載完畢?。。?)

def main():
    n = input('請(qǐng)輸入要爬取的頁數(shù):')
    url = 'http://www.netbian.com/meinv/'  # 資源的首頁,可根據(jù)自己的需求查看不同分類,自定義改變目錄,爬取相應(yīng)資源
    if not os.path.exists('./美女'):  # 如果不存在,創(chuàng)建文件目錄
        os.mkdir('./美女/')
    page = 1
    fillPic(url, page)  # 爬取第一頁,因?yàn)榈?頁和后續(xù)頁的鏈接的區(qū)別,單獨(dú)處理第一頁的爬取
    if int(n) >= 2: #爬取第2頁之后的資源
        ls = list(range(2, 1 + int(n)))
        url = 'http://www.netbian.com/meinv/'
        for i in ls: #用遍歷的方法對(duì)輸入的需求爬取的頁面做分別爬取處理
            page = str(i)
            url_page = 'http://www.netbian.com/meinv/'
            url_page += 'index_' + page + '.htm' #獲取第2頁后的每頁的詳情鏈接
            fillPic(url_page, page) #調(diào)用fillPic()函數(shù)

main()

到此這篇關(guān)于只用50行Python代碼爬取網(wǎng)絡(luò)美女高清圖片的文章就介紹到這了,更多相關(guān)Python爬取圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python opencv通過按鍵采集圖片源碼
  • 使用Python的Scrapy框架十分鐘爬取美女圖
  • Python使用爬蟲抓取美女圖片并保存到本地的方法【測(cè)試可用】
  • Python制作爬蟲抓取美女圖
  • python制作花瓣網(wǎng)美女圖片爬蟲
  • Python爬蟲入門案例之回車桌面壁紙網(wǎng)美女圖片采集

標(biāo)簽:江蘇 酒泉 金融催收 龍巖 定西 云南 寧夏 商丘

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《只用50行Python代碼爬取網(wǎng)絡(luò)美女高清圖片》,本文關(guān)鍵詞  只用,50行,Python,代碼,爬取,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《只用50行Python代碼爬取網(wǎng)絡(luò)美女高清圖片》相關(guān)的同類信息!
  • 本頁收集關(guān)于只用50行Python代碼爬取網(wǎng)絡(luò)美女高清圖片的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    曲阜市| 务川| 曲松县| 建平县| 孙吴县| 偏关县| 吕梁市| 绿春县| 巩义市| 亳州市| 葫芦岛市| 西青区| 淮滨县| 岢岚县| 黄梅县| 白山市| 九龙县| 普兰店市| 永新县| 巴青县| 尤溪县| 松阳县| 郯城县| 盱眙县| 福州市| 怀仁县| 陵水| 遵义县| 桐柏县| 濉溪县| 三原县| 临湘市| 北宁市| 吐鲁番市| 江门市| 富川| 社旗县| 谢通门县| 江源县| 莲花县| 田东县|