基本配置:
- Python版本:3.6
- 开发工具:pycharm
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个部分进行爬取
菜单栏为
首先我们先创建BeautifulSoup对象
关于BeautifulSoup的使用 查看官方文档 https://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html
选取我们需要的三个li标签加入我们创建的link_urls列表中
现在我们要爬取的三个美女类型的链接已经保存到link_urls列表中了
我们以第一类型的性感美女进行爬取
打开这个网页
我们分析这个网页会发现
总共有27个图片缩略图
其中有三个是广告
提取数据的时候要对广告进行清除
查看源代码
图片在
- 标签里面且id=‘pins’
找到这个ul标签之后
我们继续提取其中的li标签
由于广告的标签含有class属性我们提取li标签已经过滤了三个广告
所以长度为24
下一步获取图片的该类图片的地址 属性为href
一个图片是一个
- 标签
图片的链接到手 现在的链接只是我们要爬取的图片的地址 并不是图片的链接
现在我们进入图片的提取部分
我们以这个链接 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'``,<br> ``'Referer'``:``'https://www.mzitu.com/184274'` `}<br>``# 这里的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
这样就能爬取这个系列的图片了
整个写完爬虫后运行一下 泡杯茶
完整代码60行左右就能进行爬取