一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 只用50行Python代碼爬取網絡美女高清圖片

只用50行Python代碼爬取網絡美女高清圖片

2021-11-20 23:47COS0度 Python

第一次寫文章,技術不成熟之處望各位大神輕噴,今天教大家只用50行Python代碼爬取網絡美女圖片是怎么操作的,文中有非常詳細的代碼示例,對正在學習python的小伙伴們很有幫助哦,需要的朋友可以參考下

一、技術路線

requests:網頁請求
BeautifulSoup:解析html網頁
re:正則表達式,提取html網頁信息
os:保存文件

?
1
2
3
4
import re
import requests
import os
from bs4 import BeautifulSoup

二、獲取網頁信息

常規操作,獲取網頁信息的固定格式,返回的字符串格式的網頁內容,其中headers參數可模擬人為的操作,‘欺騙'網站不被發現

?
1
2
3
4
5
6
7
8
9
10
11
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代碼爬取網絡美女高清圖片

四、網頁詳情頁鏈接獲取

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

?
1
2
3
4
5
6
7
8
9
10
11
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條中獲取了每個圖片的詳情頁鏈接后,打開,右鍵圖片'審查元素',復制鏈接即可快速定位,然后保存圖片

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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()函數還增加了自定義爬取頁數的功能,詳見代碼

只用50行Python代碼爬取網絡美女高清圖片

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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(),輸入需要爬取的頁數,即可開始爬取,完整代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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()

到此這篇關于只用50行Python代碼爬取網絡美女高清圖片的文章就介紹到這了,更多相關Python爬取圖片內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/cos0du/article/details/116273972

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精品一区二区三区免费 | 国产欧美日韩在线播放 | 欧美黑人一级 | 午夜第九达达兔鲁鲁 | 国产一区二区免费不卡在线播放 | 成年性午夜免费视频网站不卡 | 国产福利一区二区在线精品 | 国产大乳美女挤奶视频 | 婷婷久久热99在线精品 | 99九九国产精品免费视频 | 欧美最猛性xxxxx短视频 | 好男人资源免费播放在线观看 | 热久久最新地址 | 午夜精品国产自在现线拍 | 11 13加污女qq看他下面 | 性色AV一区二区三区V视界影院 | 亚洲精品国产乱码AV在线观看 | 国产精品国色综合久久 | 母乳在线播放 | 99视频在线免费观看 | 成年人免费观看的视频 | 精品国产理论在线观看不卡 | 国产午夜久久精品 | 污污免费| 久9青青cao精品视频在线 | 欧美性黑人巨大gaysex | 成人看片免费无限观看视频 | 91狠狠| 日韩一区二区三区不卡视频 | 欧美a级在线观看 | 日韩一级精品视频在线观看 | 日韩在线成人 | 欧美一级一级做性视频 | 色综合久久日韩国产 | 无限资源在线观看播放 | 精品AV亚洲乱码一区二区 | 午夜伦伦电影理论片大片 | 国产经典一区二区三区蜜芽 | 暖暖的免费观看高清视频韩国 | 久久精品一区二区三区资源网 | 色依依视频视频在线观看 |