煎蛋网其中有一个版面,全是好看的小姐姐。本着美女是学习的第一动力的原则,写个程序把小姐姐们都下载下来。

URL:http://jiandan.net/ooxx


  • 程序结构
  • 分析目标网页
  • 提取目标信息
  • 将图片写入文件夹

程序结构

程序主要由一下四个函数构成

def get_html(url)def download(html)def write_to_file(url, num, count)def main()
  • get_html :利用webdriver 请求相应的网站
  • download :解析网页,调用下一个函数写入图片,并获取下一页的网址和页码
  • write_to_file :将图片写入新创建的文件夹内
  • main:程序主函数

分析目标网页

首先还是,打开网页后,右键,选择检查,来查看一下网页的html标签,看看网页的结构

可以发现网页的标签是这么排的:

<body style> == $0<div id="wrapper"><div id="body"><div id="content"><div id="comments"><div class="comments"><div class="cp-pagenavi">  #存上一页和下一页的网址<ol class="commentlist" style="list-style-type:none;"><span class="text"><img src="http://......jpg" #存放图片

既然找到了上一页的URL,以及图片存储的地址,那么就好办了。
我们可以到指定的位置来查找下一个页面的地址,而图片的开头都是以img开头的。

通过查看网页的返回信息:

可以看到,返回的是一堆html代码,并没有所需要的图片链接信息。

所以,网站的图片应该是通过js加载的,如果使用常规的requests请求,返回的数据是得不到图片信息的。这就可以利用selenium自动化测试请求库来进行加载。selenium请求库可以模拟一个真是的浏览器访问网站,加载js,返回所需要的数据。当然,这个需要下载对应的chrome驱动。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWaitbrowser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)     #设置网站等待时间

提取目标信息

在使用selenium加载了网页后,就可以使用BeautifulSoup解析库来解析其中的信息了:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWaitbrowser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)     #设置网站等待时间url = 'http://jandan.net/ooxx'
browser.get(url)                        # 使用浏览器访问
html = browser.page_source                   # 获取html信息
soup = BeautifulSoup(html, 'lxml')    imgs = soup.select('img')              # 返回值为list
url_link = soup.select('#body #comments .comments .cp-pagenavi a')[-1]

由于select() 函数返回的是一个列表,根据观察, url_link 列表的最后一项即为下一页的链接地址。 查看一下所得到的标签,并提取出其中的网址:

print("查找标签url_link :",url_link)>> 查找标签url_link : <a class="previous-comment-page" href="//jandan.net/ooxx/page-46#comments" title="Older Comments">下一页</a>print(type(url_link))
>> <class 'bs4.element.Tag'>href = re.findall('href="(.*?)"', str(url_link))
print("提取其中的网址href:",href)
>> 提取其中的网址href: ['//jandan.net/ooxx/page-46#comments']next_url = 'https:' + href[0]
>> 完整下一页的网址: https://jandan.net/ooxx/page-46#comments

至于页码,也可以通过这种方法来提取出来:

next_page = re.findall('\d+', str(url_link))[0]
print("下一页页码:",next_page)>> 下一页页码: 46

而提取到的图片链接,可以使用for循环提取出来:

for img in imgs:img_url = re.findall('src="(.*?)"', str(img))      # 图片链接if img_url[0][-3:] == 'jpg' and img_url[0][:4] == 'http':print('正在下载:%s 第 %s 张' % (img_url[0], count))write_to_file(img_url[0], "第{}页".format(current_page) , count)

因为提取到的img标签中,并不都是图片,还有一些gif、png格式的,以及一些后缀为jpg,但并不是完整图片链接的,这些都是不需要的,所以做一个判断,来剔除掉这些。 (.format()用法与 %s 用法类似)

将图片写入文件夹

现在,网页内的图片也能找到了,下一个页面的网址也能正确提取到,下一个页面页码也已经可以得到了,接下来就是要创建分类的文件夹,并将不同页面的图片保存到他们相应的文件夹内了。

def write_to_file(url, num, count):'''把抓取到的图片保存到本地文件:param url: 图片链接:param num: 页数(根据页数创建文件夹):param count: 第几张(图片编号):return: None'''dirName = u'{}/{}'.format('煎蛋网', num)if not os.path.exists(dirName):os.makedirs(dirName)filename = '%s/%s/%s.jpg' % (os.path.abspath('.'), dirName, count)   #绝对路径 / 煎蛋网+页码 / 第几张print(filename)pic = requests.get(url).contentwith open(filename, 'wb+') as jpg:                     #以二进制写    自动关闭文件jpg.write(pic)

首先在程序默认的地址下(pycharm写的默认在程序所在的目录内),检查一下是否存在该命名的文件,没有的话就创建相应的文件夹

而每次下载的时候,要获得下载路径以及下载的图片信息,于是就打印一下filename,它包含了文件的绝对路径 / 煎蛋网第几页 / 第几张图片 信息

最后,以二进制写文件,使用with语句确保结束后会自动关闭文件。

pic = requests.get(url).content
with open(filename, 'wb+') as jpg:      #以二进制写    自动关闭文件jpg.write(pic)

这里输入的参数url就是前面所获得的页面内图片的信息
类似 http://wx2.sinaimg.cn/mw600/55ae61d3gy1fsjaiemac0j21kw23vajh.jpg 这种。
使用request.get解析后.content获取图片的二进制

以二进制写入文件。

程序经验证可以正确执行爬取图片,但运行很慢。完整程序已经上传到 Github上

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

  1. python爬取煎蛋网妹子图

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

  2. B站小甲鱼零基础python视频P57爬取煎蛋网OOXX妹纸图代码修改

    问题描述 在B站看[小甲鱼]零基础入门学习PythonP57集时遇到了一些问题,现在煎蛋网的的图片每一页的网址和视频里的不太一样,看弹幕有的说能爬,有的说不能爬,也没有标明日期,当时挺懵逼的,不知道该 ...

  3. Python 爬取煎蛋网随手拍

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

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

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

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

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

  6. python 爬虫爬取煎蛋网妹子图,我1T的硬盘装满了!

    前言 大家好,这里是「brucepk」爬虫 系列教程.此系列教程以实例项目为材料进行分析,从项目中学习 python 爬虫,跟着我一起学习,每天进步一点点. 煎蛋网站 image 很多朋友都反应学 p ...

  7. 利用Selenium爬取煎蛋网妹纸图原来是这么简单!!!

    上期说到,下期更新爬取煎蛋网妹纸的selenium版本,它来了!!! 获取页面url信息 获取图片url信息 永久性保存图片 注释: 想要获取GeckoDriver安装包的小伙伴,可以给博主留言或者搜 ...

  8. python爬虫图片实例-Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: ...

  9. python爬图代码实例_Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: ...

最新文章

  1. 搭建Solr集群的推荐方案
  2. 数据备份软件,BackBone,NetVault,网络存储备份,系统集成
  3. Swift游戏实战-跑酷熊猫 00 游戏预览
  4. ubuntu下安装各种软件
  5. 计算机的主存储器可以分为哪两类,2017年计算机应用基础模拟试题「答案」(2)...
  6. mysql从表截取信息_mysql中循环截取用户信息并插入到目标表对应的字段中
  7. javascript window location
  8. SpringBoot动态切换数据源-快速集成多数据源的启动器
  9. 【渝粤教育】电大中专学前儿童社会教育 (2)作业 题库
  10. python语言只能用4个空格_python - 单词之间只保留一个空格,用replace为什么会出错...
  11. mongodb linux用户验证登陆,转载:linux下mongodb的用户查询_【Linux】MongoDB创建数据库(开启用户认证)...
  12. SetTimer函数
  13. 赤菟CH32V307 RISC-V 开发板 rt-thread 的坑 - esp8266的使用
  14. 中文拼音排序的两种方法
  15. 课堂笔记_图形学基础课程_简单认知00
  16. 计算机文化基础说课ppt,计算机文化基础说课 -_图文.ppt
  17. 使用安卓手机自建 KMS 服务器激活Windows系统(任意安卓手机 无需 Root)
  18. The destination is read-only
  19. 博士申请 | 蒙纳士大学(苏州)陈存建老师招收人工智能方向全奖博士生
  20. pyton 爬虫-图片

热门文章

  1. 云电脑玩游戏用手柄可以吗
  2. matlab画奥迪标志,绘画汽车,用PS绘制一个逼真的奥迪汽车
  3. requests.exceptions.SSLError: HTTPSConnectionPool
  4. xxl-job介绍详解,通俗易懂
  5. 【【数据可视化毕业设计:差旅数据可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩】-哔哩哔哩】 https://b23.tv/iTt30QG
  6. word里如何插入取整符号?
  7. 安卓手机老是提示内存不足如何解决
  8. 蓝桥杯单片机学习日记3-矩阵键盘的使用,线反转法,三步消抖,按键长按与短按
  9. 手电筒安卓_小米开炮了,安卓手机隐私裸奔揭秘
  10. 某农业大学c/c++第三次实验