爬取妹子图片

2019-06-13

环境WIN10 1903 python 3.7.3

个人习惯先在IDLE中进行调试

import requests
from bs4 import BeautifulSoup
url='https://www.mzitu.com/'
response=requests.get(url=url)
print(response.status_code)

403是返回的状态码

403错误,表示资源不可用。服务器理解客户的请求,但拒绝处理它,通常由于服务器上文件或目录的权限设置导致的WEB访问错误。

该网站有反爬措施

我们先试一下伪造浏览器

打开google看一下我们发送的请求

我们构造headers

headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'
}

返回的状态码为 200

说明伪造浏览器成功

使用response.text查看返回的内容

我习惯调试使用bs4库BeautifulSoup类

正式写脚本我习惯用lxml库的etree类

查看网页编码

解析判断的编码与备用编码相同 我们可以忽略

开始进入解析部分

我们选取网页格式相同的4个部分进行爬取

菜单栏为<ul></ul>标签而且id='menu-nav'开始写代码

首先我们先创建BeautifulSoup对象

关于BeautifulSoup的使用 查看官方文档 https://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html

选取我们需要的三个li标签加入我们创建的link_urls列表中

现在我们要爬取的三个美女类型的链接已经保存到link_urls列表中了

我们以第一类型的性感美女进行爬取

打开这个网页

我们分析这个网页会发现

总共有27个图片缩略图

其中有三个是广告

提取数据的时候要对广告进行清除

查看源代码

图片在<ul>标签里面且id='pins'

找到这个ul标签之后

我们继续提取其中的li标签

由于广告的标签含有class属性我们提取li标签已经过滤了三个广告

所以长度为24

下一步获取图片的该类图片的地址 属性为href

一个图片是一个<li>标签

图片的链接到手 现在的链接只是我们要爬取的图片的地址 并不是图片的链接

现在我们进入图片的提取部分

我们以这个链接 https://www.mzitu.com/184274 进行分析

我们要的图片链接在这里

获取页面还是要通过伪造浏览器的方式

下载页面完成我们去获得图片的链接

方法与前面类似

网页中第一个img标签就是我们要的图片

获取到图片的地址 地址在img标签的src属性中我们提取出来

使用requests去下载它

我们使用requests下载时候会发现下载失败

文件写入为0

我们继续构造headers来成功下载图片

headers={
"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36',
  'Referer':'https://www.mzitu.com/184274'
}
# 这里的Referer是你跳转到这个图片的上一个地址 这也是一个反爬小技巧

图片下载成功

img是requests返回内容

由于图片是二进制文件我们用"wb"方式打开写入文件

保存为jpg这样图片就写入成功了

视频 音频也可以这样下载

打开我们下载的图片

成功下载

爬取整个类型的图片我们只需要构造几个函数对url进行解析就好

以下笔者的思路

1 找到一个图片的地址我们可以提取页面的下一页的链接然后就是递归调用函数 进行爬取

2 通过查看图片的url我们发现图片是有规律的

https://i.meizitu.net/2019/05/12a02.jpg

https://i.meizitu.net/2019/05/12a03.jpg

...................

最后一张图片就是

https://i.meizitu.net/2019/05/12a50.jpg

这样就能爬取这个系列的图片了

最新文章

  1. Linux常用获取进程占用资源情况手段
  2. Android微信分享图片大于32k进行压缩
  3. event.srcElement ,event.fromElement,event.toElement
  4. Java--concurrent并发包下阻塞队列介绍
  5. position:absolute/relative/fixed小结
  6. 20145223《Java程序设计》第5周学习总结
  7. javascript首尾反转字符
  8. 简单linux网络驱动程序
  9. 给UIImage添加蒙版
  10. JS检测图片的大小
  11. 老李分享:Robotium创建Note的实例
  12. 如何定制 Calico 的 IP 池?- 每天5分钟玩转 Docker 容器技术(71)
  13. 怎样在VS2010-2017中使用LightningChart绘图控件?
  14. java.util.zip.ZipException: invalid entry size
  15. 微信小程序数组对象
  16. LDAP-HA安装与配置(Keepalived方式实现)
  17. matlab sign函数用法及实例
  18. C++中的memset、zeroMemory和={0}操作( 转)
  19. 5I - 汉诺塔IV
  20. 记一次寻找appbug的问题

热门文章

  1. noip模拟赛 c
  2. 有用的生活有关的website
  3. HDU 5501
  4. 把握linux内核设计思想系列
  5. Apache server配置
  6. C++操作Json字符串
  7. B3403 [Usaco2009 Open]Cow Line 直线上的牛 deque
  8. C# List常识之经常被忽略的常识
  9. mysql重设root的密码&#160;mac
  10. HTML 13 常用构造函数( 类 )