首页天道酬勤python爬虫爬片教程,python爬取美女片程序

python爬虫爬片教程,python爬取美女片程序

admin 08-28 10:08 383次浏览
Python美女图片爬虫实战 准备工作

python3开发环境

相应的python包:

import urllib.requestfrom lxml import etreeimport reimport osimport datetime

开发环境:为了方便测试,

我这里使用的是Jupyter notebook进行开发测试。

当然也可以使用其他的开发环境,例如PyCharm。

谷歌浏览器 :用于抓包分析(其他浏览器也可以,例如火狐浏览器)

(更详细的关于安装python包的安装这里就不说了,毕竟这个不是入门教程)

分析网页结构

网站:https://www.mn52.com/ mn52图库网(是正规的网站,没有露点,不属于色情范围,是合法的)

这个网站是一个图片网站,内容基本都是图片,分类有很多,因为网页结构都是一样的,所以我这里选取了性感美女这个分类进行分析。

性感美女:https://www.mn52.com/xingganmeinv/

因为我要爬取这个分类下的所有图片,所以首先我要分析这个url的组成。

爬取的时候是1~220页,每一页有20组图片(即一页有20个缩略图,点击进去才是我们需要获取的原图)。

分析完成之后思路如下:获取每一页的url → 获取每一页的20个详情页面的url → 获取每一详情页下的原图url → 下载每组图片的原图到本地。最后使用循环进行爬取。

大致的思路就是这样,下面开始写代码进行测试。

写代码分析 列表的url组成 第一页https://www.mn52.com/xingganmeinv/list_1_1.html第二页https://www.mn52.com/xingganmeinv/list_1_2.html末页https://www.mn52.com/xingganmeinv/list_1_220.html url组成:url="https://www.mn52.com/xingganmeinv/list_1_" + number +".html" (number=1-->200)

详情页url的获取

然后根据 Xpath表达式进行获取

//div[@id="waterfall"]/ul/li/div/a/@href 详情页下的所有图片url

使用 Xpath表达式获取

//div/ul[@id="pictureurls"]/li/div/a/img/@src

图片命名规则 图片的类型 因为这里的图片有 .jpg 和 .png两种格式,所有下载的图片还是需要按照这两种格式进行保存,所有需要获取原来图片的保存格式。这里获取图片的数据是根据IO流进行传输的,这里采用二进制的方式进行传输,即字节码方式传输,而不是字符。

由于每一组图片都是一样的格式保存的,要么是 .jpg,要么是 .png,所以我这里只是知道一张图片的保存格式即可,即获取到第一张图片的url后缀即可。

例如:实际的详情页下的某张图片的url组成

https://image.mn52.com/img/allimg/190827/8-1ZRH10243.pnghttps://image.mn52.com/img/allimg/190818/8-1ZQR13348.jpg

这里我们需要获取的是后面的四个字符

由于前面已经获取了每一个详情页下的所有原图url的列表[ ],这里只需要获取列表的第一个元素的后四个字符即可。

# src列表下的第一个元素 (src是所有的原图url列表)firstSrc = src[0]# 获取字符串的最后四个字符filetype = firstSrc[-4:] 图片的命名

由于我们需要下载的图片很多,可能有几万张,甚至超过几十万张,所有一个好的命名方式显得很重要。

这里我按照图片原来的命名去命名,即是我需要获取到图片原来的命名名称。

在分析测试过程中,我发现图片命名可能存在以下两种(可能不止两种)

https://image.mn52.com/img/allimg/190827/8-1ZRH10243.pnghttps://image.mn52.com/img/allimg/c160322/145V4939360050-3110O.jpg

我这里需要获取的是

8-1ZRH10243145V4939360050-3110O

由于图片类型前面已经获取到了,这里不需要再次获取。(或者也可以直接在这里获取名称和类型,直接省略上一步获取图片类型)

这里我使用正则表达式进行获取

# src是原图的urlpattern = '\w*?\-\w+'name = re.search(pattern,src).group()print(name)# src = 'https://image.mn52.com/img/allimg/c150926/144323X0404I0-1261301.jpg'# 结果144323X0404I0-1261301# src = 'https://image.mn52.com/img/allimg/190818/8-1ZQR14016.jpg'# 结果8-1ZQR14016

这样我们就可以获取到图片的名称了,无论怎么变化,这个正则表达式应该都可以满足这里的需求了。

反爬的解决

前面的工作完成之后,我迫不及待的进行了测试。

然而却遇到了403,404错误…

经过分析,我认为网站设置了防盗链

解决方案:

模拟浏览器爬取设置header为该网站链接发出的跳转请求

最后成功解决了。

然后下载了几个小时,下载了21330张性感美女图片,这里只是爬取了1~120页的图片,后面的没有继续去爬取。

自动爬取效果

程序可以改进之处 程序可以设置一个时间判断:如果每次请求时间过长就跳过(防止某次请求时间过长,造成程序假死)设置多线程爬取(其实这里和开几个程序爬取是一样道理的,这里感觉没必要…因为该网站服务器感觉性能不高,开太多程序爬取,貌似也没有提高多少效率?)使用Scrapy框架爬取(提高效率?) 完整代码

这里只提供思路,完整的程序这里就不贴出来了,主要是担心到时候太多人去爬这个网站了,造成服务器宕机,毕竟这里只是一时兴起研究一下这个网站,没必要给站长带来麻烦。

最后这个网站的性感美女图片都是写真,是合法的,没有露点,所以不存在色情一说。

有兴趣的朋友可以研究一下,完成的分析过程和思路以及反爬取的解决方案已经给出了。

最后希望大家能完整写出来,搞点写真照欣赏一下<:#滑稽>

在React-Table中导出为PDF私有云产品更新linux登录欢迎页怎么做历史中提交的图片或压缩文件如何在iOS13上更改状态栏的背景颜色和文本颜色?
爬虫获取网页片,python爬取搜狗美女片教程 战狼2片,真绮篇2片
相关内容