'''
  1. 爬取以下站点中各个明星图片,分别单独建文件夹存放。
   起始URL地址:http://www.mm131.com/mingxing
  '''
  import os
  import logging
  import requests
  from bs4 import BeautifulSoup   logging.basicConfig(level=logging.INFO)   def store_girl_img(girl_url, store_girl_dir):
  # 把girl_url的单个小姐姐放入store_girl_dir文件夹
  girl_html = requests.get(girl_url) #访问girl_url网址
  girl_html.encoding = "gbk" #修改编码,不然会是乱码
  girl_text = girl_html.text #获取girl_html的网页内容。girl_html.content返回的是bytes数据   girl_src = BeautifulSoup(girl_text, 'lxml').find("div",class_='content-pic').find('img')['src']
  #BeautifulSoup用lxml库解析girl_html的网页内容,并找到所有class_='content-pic'的div标签
  #再找到img标签下的src属性,得到单张照片的链接
  print(girl_src)   # 此处加headers是为防反爬虫,如果不加会响应403,没有权限
  headers = {
  'Referer': girl_url,
  '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'
  }
  file_name = girl_src.split('/')[-1]
  #将http://img1.mm131.me/pic/2016/1.jpg切片成["http://img1.mm131.me/pic/2016","1.jpg"],[-1]就是去第二个1.jpg
  file_name = os.path.join(store_girl_dir, file_name) #在store_girl_dir目录下创建图片名字file_name,如1.jpg
  with open(file_name, 'wb') as f: #二进制模式打开file_name
  girl_content = requests.get(girl_src, headers=headers).content # .content获取图片的二进制数据
  f.write(girl_content) #写入到file_name   def store_page_grils(href, store_girl_dir):
  # 把href这个链接下的小姐姐们(多个)放入文件夹store_girl_dir
  girl_text = requests.get(href).text #访问某个美女的图片页面
  soup = BeautifulSoup(girl_text, 'lxml') #获得BeautifulSoup对象
  # 获取美女图片的张数
  max_page_num = soup.find('div', class_='content-page').find_all('a')[-2].get_text()
  #找到class_='content-page'的div标签---->找出该div下所有的a标签,得到一个a标签列表
  #[-2]取出倒数第二个按标签,get_text()是获取文本内容
  max_page_num = int(max_page_num) #文本内容转化为整数   girl_url_list = [href] #定义一个列表,存放一个美女所有图片的链接,页面特殊,href表示第一张
  #for循环获取第二张到最后一张的链接
  for page_num in range(2, max_page_num + 1):   girl_url = str(href).replace(".html",f"_{page_num}.html") # 将.html替换_{page_num}.html
  # print(girl_url)
  girl_url_list.append(girl_url) #将第二张到最后一张的链接追加到girl_url_list
  # print(girl_url_list)
  for girl_url in girl_url_list:
  store_girl_img(girl_url, store_girl_dir) #循环调用store_girl_img函数   def main():
  url = 'http://www.mm131.com/mingxing'
  store_dir = 'meizitu' #主目录
  os.makedirs(store_dir, exist_ok=True) #创建主目录,若主目录存在不报错
  home_html = requests.get(url) #访问http://www.mm131.com/mingxing
  home_html.encoding = "gbk"
  home_text = home_html.text #获取网页内容
  # 得到小姐姐们的链接标签
  ahref_list = BeautifulSoup(home_text, 'lxml').find("div",class_="main").find_all('a')[2:22]
  #找到所有a标签,得到一个a标签列表,[2:22]表示:取a标签列表的第2到21个,因为前两个是不需要的
  # print(ahref_list)
  for ahref in ahref_list: #遍历这20个a标签
  # ahref 是bs4.element.Tag实例
  girlname = ahref.get_text() # 获取a标签的文本内容,作为存放小姐姐图片的子目录
  href = ahref['href']# 取出a标签的href属性,得到一个小姐姐图片的链接
  store_girl_dir = os.path.join(store_dir, girlname) # 拼接得到放该小姐的房间号,即存放美女的文件夹
  os.makedirs(store_girl_dir, exist_ok=True)
  logging.info(f'开始下载{girlname}的图片')
  store_page_grils(href, store_girl_dir)   if __name__ == '__main__':
  main()

爬虫mm131明星照片的更多相关文章

  1. Python网络爬虫实战(三)照片定位与B站弹幕

    之前两篇已经说完了如何爬取网页以及如何解析其中的数据,那么今天我们就可以开始第一次实战了. 这篇实战包含两个内容. * 利用爬虫调用Api来解析照片的拍摄位置 * 利用爬虫爬取Bilibili视频中的 ...

  2. 牛逼了,利用Python实现“天眼系统”,只要照片就能了解个人信息

  3. 让你从零开始学会写爬虫的5个教程(Python)

    写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...

  4. [转]让你从零开始学会写爬虫的5个教程(Python)

    让你从零开始学会写爬虫的5个教程(Python)   写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个 ...

  5. 用python批量下载图片

    一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么 ...

  6. 阿里巴巴直播内容风险防控中的AI力量

    直播作为近来新兴的互动形态和今年阿里巴巴双十一的一大亮点,其内容风险监控是一个全新的课题,技术的挑战非常大,管控难点主要包括业界缺乏成熟方案和标准.主播行为.直播内容不可控.峰值期间数千路高并发处理. ...

  7. 结合NGUI做的手机拍照(可自定义相框)

    原地址:http://www.unity蛮牛.com/thread-18220-1-1.html 在次此之前我们先要了解一下下面的我要讲的几个内容: 一.为什么要用NGUI,因为NGUI的可以做屏幕自 ...

  8. 设计模式之第18章-观察者模式(Java实现)

    设计模式之第18章-观察者模式(Java实现) 话说曾小贤,也就是陈赫这些天有些火,那么这些明星最怕的,同样最喜欢的是什么呢?没错,就是狗仔队.英文的名字比较有意思,是paparazzo,这一说法据说 ...

  9. AI新生代“教父”崛起,或成就迈向具有类人意识机器的一大步

    <麻省理工科技评论>公布了 2018 年全球十大突破性技术,“对抗性神经网络”即“生成对抗网络”作为突破性人工智能技术赫然上榜.这家全球最顶级科技杂志编辑部对这项革命性技术给出的评价是:它 ...

随机推荐

  1. [Artoolkit] ARToolKit's SDK Structure on Android

    Most applications on Android are developed in Java, and Android provides a rich framework of classes ...

  2. Shape使用

    <shape> <!-- 实心 --> <solid android:color="#ff9d77"/> <!-- 渐变 --> & ...

  3. 微信小游戏的本地缓存和清除的使用 (text.js image.js file-util.js)

    参考: 微信小游戏,文件系统 UpdateManager-小游戏 一.Egret提供的本地缓存工具类( 备注:新版本进行了修改,并增加了sound.js等) 在微信小游戏项目中,Egret提供了fil ...

  4. day_5.18_py总结

  5. python金融与量化分析----Jupyter Notebook使用

    Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言.在本文中,我们将介绍 Jupyter notebook 的主要特性,以 ...

  6. DB2 的代理 (agent)

    DB2 的代理 (agent) 是位于 DB2 服务器中的服务于应用程序请求的一些进程或线程.当有外部应用程序连接至 DB2 实例提出访问请求时,DB2 的代理就会被激活去应答这些请求.一般 DB2 ...

  7. 基于cdh5.10.x hadoop版本的apache源码编译安装spark

    参考文档:http://spark.apache.org/docs/1.6.0/building-spark.html spark安装需要选择源码编译方式进行安装部署,cdh5.10.0提供默认的二进 ...

  8. Page11:状态反馈、输出反馈的概念及性能比较,极点配置的基本概念、意义及其算法[Linear System Theory]

    内容包含离散时间线性时不变系统的稳定判据 状态反馈.输出反馈的基本概念及其性能比较 极点配置的基本概念.意义及其算法

  9. Flink – Stream Task执行过程

    Task.run if (invokable instanceof StatefulTask) { StatefulTask op = (StatefulTask) invokable; op.set ...

  10. Kafka – kafka consumer

    ConsumerRecords<String, String> records = consumer.poll(100);   /** * Fetch data for the topic ...