爬蟲mm131明星照片


 1   '''
 2        1.  爬取以下站點中各個明星圖片,分別單獨建文件夾存放。
 3            起始URL地址:http://www.mm131.com/mingxing
 4   '''
 5   import os
 6   import logging
 7   import requests
 8   from bs4 import BeautifulSoup
 9 
10   logging.basicConfig(level=logging.INFO)
11 
12 
13   def store_girl_img(girl_url, store_girl_dir):
14        # 把girl_url的單個小姐姐放入store_girl_dir文件夾
15       girl_html = requests.get(girl_url)          #訪問girl_url網址
16       girl_html.encoding = "gbk"                  #修改編碼,不然會是亂碼
17       girl_text = girl_html.text                  #獲取girl_html的網頁內容。girl_html.content返回的是bytes數據
18 
19       girl_src = BeautifulSoup(girl_text, 'lxml').find("div",class_='content-pic').find('img')['src']
20        #BeautifulSoup用lxml庫解析girl_html的網頁內容,並找到所有class_='content-pic'的div標簽
21       #再找到img標簽下的src屬性,得到單張照片的鏈接
22       print(girl_src)
23 
24       # 此處加headers是為防反爬蟲,如果不加會響應403,沒有權限
25       headers = {
26            'Referer': girl_url,
27            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
28        }
29        file_name = girl_src.split('/')[-1]
30        #將http://img1.mm131.me/pic/2016/1.jpg切片成["http://img1.mm131.me/pic/2016","1.jpg"],[-1]就是去第二個1.jpg
31        file_name = os.path.join(store_girl_dir, file_name) #在store_girl_dir目錄下創建圖片名字file_name,如1.jpg
32        with open(file_name, 'wb') as f:            #二進制模式打開file_name
33            girl_content = requests.get(girl_src, headers=headers).content   # .content獲取圖片的二進制數據
34           f.write(girl_content)                   #寫入到file_name
35 
36 
37   def store_page_grils(href, store_girl_dir):
38        # 把href這個鏈接下的小姐姐們(多個)放入文件夾store_girl_dir
39        girl_text = requests.get(href).text         #訪問某個美女的圖片頁面
40       soup = BeautifulSoup(girl_text, 'lxml')     #獲得BeautifulSoup對象
41       # 獲取美女圖片的張數
42       max_page_num = soup.find('div', class_='content-page').find_all('a')[-2].get_text()
43        #找到class_='content-page'的div標簽---->找出該div下所有的a標簽,得到一個a標簽列表
44       #[-2]取出倒數第二個按標簽,get_text()是獲取文本內容
45       max_page_num = int(max_page_num)   #文本內容轉化為整數
46 
47       girl_url_list = [href] #定義一個列表,存放一個美女所有圖片的鏈接,頁面特殊,href表示第一張
48       #for循環獲取第二張到最后一張的鏈接
49       for page_num in range(2, max_page_num + 1):
50 
51           girl_url = str(href).replace(".html",f"_{page_num}.html") # 將.html替換_{page_num}.html
52            # print(girl_url)
53            girl_url_list.append(girl_url)      #將第二張到最后一張的鏈接追加到girl_url_list
54        # print(girl_url_list)
55        for girl_url in girl_url_list:
56            store_girl_img(girl_url, store_girl_dir)  #循環調用store_girl_img函數
57 
58 
59    def main():
60        url = 'http://www.mm131.com/mingxing'
61        store_dir = 'meizitu'                   #主目錄
62       os.makedirs(store_dir, exist_ok=True)   #創建主目錄,若主目錄存在不報錯
63       home_html = requests.get(url)           #訪問http://www.mm131.com/mingxing
64        home_html.encoding = "gbk"
65        home_text = home_html.text              #獲取網頁內容
66       # 得到小姐姐們的鏈接標簽
67       ahref_list = BeautifulSoup(home_text, 'lxml').find("div",class_="main").find_all('a')[2:22]
68        #找到所有a標簽,得到一個a標簽列表,[2:22]表示:取a標簽列表的第2到21個,因為前兩個是不需要的
69       # print(ahref_list)
70        for ahref in ahref_list:            #遍歷這20個a標簽
71           # ahref 是bs4.element.Tag實例
72           girlname = ahref.get_text()  # 獲取a標簽的文本內容,作為存放小姐姐圖片的子目錄
73           href = ahref['href']# 取出a標簽的href屬性,得到一個小姐姐圖片的鏈接
74           store_girl_dir = os.path.join(store_dir, girlname)  # 拼接得到放該小姐的房間號,即存放美女的文件夾
75           os.makedirs(store_girl_dir, exist_ok=True)
76            logging.info(f'開始下載{girlname}的圖片')
77            store_page_grils(href, store_girl_dir)
78 
79 
80   if __name__ == '__main__':
81        main()
82   
83 
84  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM