煎蛋妹子图网站

最近一直在通过爬虫的练习,来巩固自己的所学习到的 python 基础,和爬虫一些框架的使用。今天的程序就是最近在学习的 selenium 库,通过利用 requests + beautifulsoup + selenium 库来进行网站的抓取。抓取的对象是煎蛋网中的妹子板块,图片的质量还是很高的,我放几张妹子图大家感受下。

正所谓妹子驱动学习,今天就给大家详细解析下我是如何一步步的完成妹子图片的抓取。

爬取结果

先看下最后的爬取结果,通过运行 demo.py 代码,程序就会把网站上的妹子图片,保存到当前工程目录下。在此程序中我创建了「jiandan」文件夹,并以当前的进度条为新的文件夹名,即「0.0」「1.0」「2.1」等等。最后把爬取到的图片,保存到相应的文件里。

程序结构

程序主要是由 6 个函数组成

get_one():是利用 webdriver 来请求对应的网站

pares_one():解析没带进度条的网站

pares_one_of_num():解析有带进度条的网站

write_to_file():把抓取到的图片保存到本地文件

next():进行翻页

main():程序执行的主函数

程序思路

如果你对爬虫比较熟悉的话,就会知道爬虫的步骤其实很简单,总结下主要有三部分:

1 目标站点分析,利用合适的请求库进行请求。

2 解析源代码,提取出相应的数据。

3 保存数据。

爬虫程序核心部分就这三个。我们顺着这个思路来看看这次的代码。

目标站点分析

首先要对目标网站进行结构分析,看看它的网页结构是如何,以及网页返回的数据是什么,是否有反爬机制,有些数据是否是通过 js 进行渲染,是否要进行翻页等等。

通过谷歌浏览器的开发者模式可以看到,网站的返回结果里是一堆 html 代码,但并没有我们想要的图片链接信息。如果你用常规的 requests 进行请求,返回的数据是不会有我们想要的图片信息。

所以这里我就想到,网站的图片资源应该是通过 js 加载的。对于需要 js 才能加载出来的网站,我们就可以利用 selenium 自动化测试请求库来进行加载。通过 selenium 请求库,我们就可以模拟一个真实的浏览器,请求网站,加载 js,返回我们想要的数据。这里对应的代码如下,需要你去网上下载对应的 chrome 驱动。

browser= webdriver.Chrome()

# 设置网站等待时间

wait= WebDriverWait(browser,10)

图片信息提取

随后就可以利用 beautifulsoup 这个解析库进行解析,把想要的信息提取出来。在这里我们需要的是图片信息,所以我通过 select() 函数进行提取,代码如下:

soup= BeautifulSoup(html,'lxml')imgs= soup.select('img')

返回的是一个列表,然后再利用 for 把每个图片的链接,提取出来,并下载,代码如下:

forimginimgs:img_url = re.findall('src="(.*?)"', str(img))ifnotimg_url[0][-3:] =='gif':ifnotimg_url[0][-3:] =='png':ifimg_url[0][-3:]:print('正在下载:%s 第 %s 张'% (img_url[0], count))write_fo_file(img_url[0], percent_num, count)count +=1

这里需要注意的是,我最开始在爬取的过程中遇到有些图片不是 jpg 格式,以及有些图片是 gif 格式。所以我加了一些判断来保证,获取到的图片链接是 jpg 格式,程序才能把图片下载下来。所以这里就有优化的地方,大家可以去再查找一些资料,看看是否可以把 png 或 gif 格式的图片一起保存。

解析源代码

当前进度条

为了控制程序爬取的次数,我们就需要找到一些条件来进行判断。一般的网站是会返回总的条数,但这次的网站通过观察并没有返回总条数的信息。并且在最开始进入妹子图板块,上方是没有进度条信息。

但当点击下一页的时候,网站就有显示出当前的进度条。

我们就可以利用这个当前浏览的位置,来控制程序爬取的次数。随后通过网站的源代码分析,就很容易得到这部分的信息,对应的代码如下:

num= soup.select('#body #comments .comments .page-meter-title')[0].getText()percent= re.findall('\d+', num)percent_num= percent[0] +'.'+ percent[1]

然后定义一个 next() 函数,来判断当前的进度条是否达到 100.0%,如果没有则继续爬取,对应的代码如下:

defnext(url):html = get_one(url)percent_num, next_url = pares_one_of_num(html)whilepercent_num !='100.0':next(next_url)

下一页链接

进一步的观察我们可以看到,下一页的链接地址,是保存在 a 标签当中,所以我们获取到 a 标签的内容,我们就有了跳转的能力,就可以爬取下一页的内容。对应的代码如下:

url= soup.select('#body #comments .comments .cp-pagenavi a')[1]href= re.findall('href="(.*?)"', str(url))next_url='https:'+ href[0]针对最开始的页面没有当前浏览位置信息,我分别写了两个解析函数:pares_one()、pares_one_of_num()。对应的代码如下:defpares_one(html):soup = BeautifulSoup(html,'lxml')imgs = soup.select('img')url = soup.select('#body #comments .comments .cp-pagenavi a')[1]href = re.findall('href="(.*?)"', str(url))next_url ='https:'+ href[0]count =0forimginimgs:img_url = re.findall('src="(.*?)"', str(img))ifnotimg_url[0][-3:] =='gif':ifnotimg_url[0][-3:] =='png':print('正在下载:%s 第 %s 张'% (img_url[0], count))write_fo_file(img_url[0],'0.0', count)count +=1returnnext_urldefpares_one_of_num(html):soup = BeautifulSoup(html,'lxml')imgs = soup.select('img')num = soup.select('#body #comments .comments .page-meter-title')[0].getText()percent = re.findall('\d+', num)url = soup.select('#body #comments .comments .cp-pagenavi a')[1]href = re.findall('href="(.*?)"', str(url))percent_num = percent[0] +'.'+ percent[1]next_url ='https:'+ href[0]count =0forimginimgs:img_url = re.findall('src="(.*?)"', str(img))ifnotimg_url[0][-3:] =='gif':ifnotimg_url[0][-3:] =='png':ifimg_url[0][-3:]:print('正在下载:%s 第 %s 张'% (img_url[0], count))write_fo_file(img_url[0], percent_num, count)count +=1returnpercent_num, next_url

保存数据

最后就是把图片保存到文件中,这部分的代码如下:

defwrite_fo_file(url, num, count):dirName =u'{}/{}'.format('jiandan', num)ifnotos.path.exists(dirName):os.makedirs(dirName)filename ='%s/%s/%s.jpg'% (os.path.abspath('.'), dirName, count)print(filename)withopen(filename,'wb+')asjpg:jpg.write(requests.get(url).content)

优化改进

源代码我已上传到 Github 上,需要的同学可以点击「阅读原文」,如果觉得程序还不错的话,可以给我项目点个 star。

本次的程序还有一些不足的地方,比如利用 selenium 库在解析的时候非常的慢,这部分是可以优化的。还有程序在爬取到 80.6% 的时候,程序报错了,并没能把图片全部爬取完。这就说明还有一些情况,我没有考虑到。有待以后进一步优化。

这波教程不点个赞,不关注一下说不过去吧?这个网站有很多福利,我只能说大家注意身体。

对Python开发,爬虫等技术有兴趣的朋友可加群705673780,一起讨论技术,交流学习。

有兴趣的朋友可以关注公众号哦,每天会有关于Python的技术信息更新,走过路过不要错过呢~

Python 爬取煎蛋妹子图相关推荐

  1. python 抓取“煎蛋妹子图”并分页存在本地(普通版和多线程版)

    想测试一下python多线程爬虫的效率,就写了个爬虫程序的多线程版和普通版.测试了一下.发现单线程比多线程还快,不理解.看来有两种可能,一是我写的多线程爬虫有问题,二是python对多线程的支持有局限 ...

  2. 使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图

    第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到"煎蛋网xxoo"网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保 ...

  3. python爬取煎蛋网妹子图

    看了小甲鱼的python教学视频,爬取煎蛋网妹子图的代码已经不适用了,网上其它人的代码多有报错,本萌新结合其他人的方法,终于写出一个可行的,在此分享_(:з)∠)_(运行非常慢就是了) import ...

  4. python爬取煎蛋美眉

    闲来无事,利用python写了个爬虫,爬取煎蛋的美眉.不要问我为什么不爬取淘宝的,大家都是男人,煎蛋上面的美眉质量普遍比其他地方高啊有木有?说正经的,也算是对爬虫一些基本的库的一个总结吧.一如既往,我 ...

  5. Python爬取煎蛋网的妹子图

    煎蛋网其中有一个版面,全是好看的小姐姐.本着美女是学习的第一动力的原则,写个程序把小姐姐们都下载下来. URL:http://jiandan.net/ooxx 程序结构 分析目标网页 提取目标信息 将 ...

  6. python爬取煎蛋网妹子图,已解密图片~~~~~

    本来想爬一波无聊图,唉,竟然加密了.... 还好是base64 不说了,代码献上 2018.12.14 有效..... import requests from bs4 import Beautifu ...

  7. Python 爬取煎蛋网随手拍

    百度百科对爬虫的定义为:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁, ...

  8. python 爬取煎蛋网妹子的图片

    昨晚跑完步,回家看了点小甲鱼的python视频,讲了点爬虫相关知识,于是今天兴致来了,尝试自己写写看,晚上再回去看看他是怎么实现的. 写的过程中发现对于正则表达式这块真是个坑,很多时候都我都是将一些u ...

  9. 福利!!!Python爬取好看的妹子图!!!

    大致步骤: 第一步:找到我们要爬取的网站 https://www.vmgirls.com/这是个妹子图片的私人网站 第二步:打开Vscode或者Pycharm都可以 复制我的代码,详细的解释写好了 p ...

最新文章

  1. python 中cookie_详解Python中的Cookie模块使用
  2. 织梦html仅动态,dede织梦系统后台发布文章时设置为默认动态浏览的方法
  3. select case when if 的一些用法
  4. 自助餐比喻秒懂微服务
  5. linux下配置myBase7.ini
  6. linux操作命令comm,Linux
  7. 20171207L09-04老男孩Linux运维实战培训-Lamp系列-Apache服务生产实战应用
  8. 想要组装一台 RISC-V PC?试试这个 RISC-V 开发板
  9. 【医学图像分割】 基于matlab GVF算法医学图像分割【含Matlab源码 1213期】
  10. 机器学习加速器文献整理
  11. DNS地址,DNS服务器作用
  12. 轻量级交通仿真——Flow
  13. Esp8266 -- 心知天气get请求及url讲解说明
  14. 一个更加强大的查壳工具, 更新版本
  15. 华硕飞行堡垒56789原厂Windows10系统
  16. 爱酱,鹿鸣?!自己怎么做一个虚拟二次元偶像?
  17. ADB——查看手机设备信息
  18. 低频RFID 底层编码
  19. 论文浅尝 | ERNIE-ViL:从场景图中获取结构化知识来学习视觉语言联合表示
  20. Hadoop技术优缺点详解

热门文章

  1. [OpenCV实战]10 使用Hu矩进行形状匹配
  2. Cypher语法简介
  3. 如何在自己网站上播放上传到优酷的视频
  4. 机器人关节(Joint)之间的坐标变换(Transform)
  5. 无盘服务器架设之四:iPxe无盘超级应用实例
  6. 再谈区块链在积分领域的应用
  7. 新型发明创造大赛计算机类,关于组织参加成都市第三十三届青少年科技创新大赛的通知...
  8. 机器学习入门必须掌握的8个关键词知识
  9. 一文查看公信宝查封始末,CEO此前曾表示获利数千万
  10. php 角度与风向转换,将风向与角度转换为文字