使用Python爬取小姐姐图片(beautifulsoup法)


Posted in Python onFebruary 11, 2021

Python有许多强大的库用于爬虫,如beautifulsoup、requests等,本文将以网站https://www.xiurenji.cc/XiuRen/为例(慎点!!),讲解网络爬取图片的一般步骤。
为什么选择这个网站?其实与网站的内容无关。主要有两项技术层面的原因:①该网站的页面构造较有规律,适合新手对爬虫的技巧加强认识。②该网站没有反爬虫机制,可以放心使用爬虫。

第三方库需求

  •  beautifulsoup
  • requests

 步骤

打开网站,点击不同的页面:
发现其首页是https://www.xiurenji.cc/XiuRen/,而第二页是https://www.xiurenji.cc/XiuRen/index2.html,第三页第四页以此类推。为了爬虫代码的普适性,我们不妨从第二页以后进行构造url。

使用Python爬取小姐姐图片(beautifulsoup法)

选中封面图片,点击检查:

使用Python爬取小姐姐图片(beautifulsoup法)

可以发现,图片的信息,都在'div',class_='dan'里,而链接又在a标签下的href里。据此我们可以写一段代码提取出每一个封面图片的url:

def getFirstPage(page):
  url='https://www.xiurenji.cc/XiuRen/index'+str(page)+'.html'#获得网站每一个首页的网址
  res=requests.get(url)#发送请求
  res.encoding="gbk"#设置编码方式为gbk
  html=res.text
  soup=BeautifulSoup(html,features='lxml')
  lists=soup.find_all('div',class_='dan')#找到储存每一个封面图片的标签值
  urls=[]
  for item in lists:
   url1=item.find('a').get('href')#寻找每一个封面对应的网址
   urls.append('https://www.xiurenji.cc'+url1)#在列表的尾部添加一个元素,达到扩充列表的目的,注意要把网址扩充完整
  return urls#返回该主页每一个封面对应的网址

点击封面图片,打开不同的页面,可以发现,首页的网址是https://www.xiurenji.cc/XiuRen/xxxx.html,而第二页的网址是https://www.xiurenji.cc/XiuRen/xxxx_1.html,第三第四页同理。同样为了普适性,我们从第二页开始爬取。

使用Python爬取小姐姐图片(beautifulsoup法)

右键,点击“检查”:

使用Python爬取小姐姐图片(beautifulsoup法)

可以发现所有的图片信息都储存在'div',class_='img'中,链接、标题分别在img标签中的srcalt中,我们同样也可以将它们提取出来。

def getFirstPage(page):
  url='https://www.xiurenji.cc/XiuRen/index'+str(page)+'.html'#获得网站每一个首页的网址
  res=requests.get(url)#发送请求
  res.encoding="gbk"#设置编码方式为gbk
  html=res.text
  soup=BeautifulSoup(html,features='lxml')
  lists=soup.find_all('div',class_='dan')#找到储存每一个封面图片的标签值
  urls=[]
  for item in lists:
   url1=item.find('a').get('href')#寻找每一个封面对应的网址
   urls.append('https://www.xiurenji.cc'+url1)#在列表的尾部添加一个元素,达到扩充列表的目的,注意要把网址扩充完整
  return urls#返回该主页每一个封面对应的网址

完整代码

import requests
from bs4 import BeautifulSoup

def getFirstPage(page):
  url='https://www.xiurenji.cc/XiuRen/index'+str(page)+'.html'#获得网站每一个首页的网址
  res=requests.get(url)#发送请求
  res.encoding="gbk"#设置编码方式为gbk
  html=res.text
  soup=BeautifulSoup(html,features='lxml')
  lists=soup.find_all('div',class_='dan')#找到储存每一个封面图片的标签值
  urls=[]
  for item in lists:
   url1=item.find('a').get('href')#寻找每一个封面对应的网址
   urls.append('https://www.xiurenji.cc'+url1)#在列表的尾部添加一个元素,达到扩充列表的目的,注意要把网址扩充完整
  return urls#返回该主页每一个封面对应的网址

def download(urls):
 for url1 in urls:
  print("prepare to download pictures in "+url1)
  getEveryPage(url1)#下载页面内的图片
  print("all pictures in "+url1+"are downloaded")
  
def getEveryPage(url1):
 total=0#total的作用:对属于每一个封面内的图片一次编号
 for n in range (1,11):#每一个封面对应下载10张图,可自行调整
  temp=url1.replace('.html','')
  url2=temp+'_'+str(n)+'.html'#获得每一内部页面的网址
  res=requests.get(url2)
  res.encoding="gbk"
  html=res.text
  soup=BeautifulSoup(html,features='lxml')
  lists1=soup.find_all('div',class_='img')#储存图片的路径
  
  for item in lists1:
   url=item.find('img').get('src')
   title=item.find('img').get('alt')#获取图片及其标题
   picurl='https://www.xiurenji.cc'+url#获取完整的图片标题
   picture=requests.get(picurl).content#下载图片
   address='D:\pythonimages'+'\\'#自定义保存图片的路径
   with open(address+title+str(total)+'.jpg','wb') as file:#保存图片
    print("downloading"+title+str(total))
    total=total+1
    file.write(picture)
    

if __name__ == "__main__":
 page=int(input('input the page you want:'))
 urls=getFirstPage(page)
 download(urls)

本文仅供学习参考,切勿用作其他用途!

到此这篇关于Python爬取小姐姐图片(beautifulsoup法)的文章就介绍到这了,更多相关Python爬取小姐姐图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
编写Python脚本把sqlAlchemy对象转换成dict的教程
May 29 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
关于Python数据结构中字典的心得
Dec 04 Python
python3实现随机数
Jun 25 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
值得收藏的10道python 面试题
Apr 15 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
python str字符串转uuid实例
Mar 03 Python
python缩进长度是否统一
Aug 02 Python
python中zip()函数遍历多个列表方法
Feb 18 Python
Python装饰器的练习题
Nov 23 Python
详解python日志输出使用配置文件格式
Feb 10 #Python
python 获取域名到期时间的方法步骤
Feb 10 #Python
Numpy ndarray 多维数组对象的使用
Feb 10 #Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 #Python
python利用文件时间批量重命名照片和视频
Feb 09 #Python
python opencv实现图像配准与比较
Feb 09 #Python
python urllib和urllib3知识点总结
Feb 08 #Python
You might like
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
php 404错误页面实现代码
2009/06/22 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
python登陆asp网站页面的实现代码
2015/01/14 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
Python引用计数操作示例
2018/08/23 Python
Python3爬虫学习入门教程
2018/12/11 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
三方股东合作协议书
2014/10/28 职场文书