• 爬虫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  
  • 相关阅读:
    mysql--连接查询(内外连接)
    Mysql--select基础查询
    Mysql--数据定义语言(DDL)
    Mysql--数据操作语言(DML)
    java--String、StringBuilder、StringBuffer的解析和比较?
    Java--equals和 == 的比较和equals()、HashCode()的重写
    Mysql--数据类型
    Mysql--约束
    SpringCloud版本说明
    springBoot 发送邮件
  • 原文地址:https://www.cnblogs.com/MisterZZL/p/9534292.html
Copyright © 2020-2023  润新知