使用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 相关文章推荐
Django中的“惰性翻译”方法的相关使用
Jul 27 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
Python语言实现百度语音识别API的使用实例
Dec 13 Python
使用Django和Python创建Json response的方法
Mar 26 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
python issubclass 和 isinstance函数
Jul 25 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
Python实现爬取网页中动态加载的数据
Aug 17 Python
基于python爬取链家二手房信息代码示例
Oct 21 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
Dec 27 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
php自动更新版权信息显示的方法
2015/06/19 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
js实现3D旋转相册
2020/08/02 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
Python3读取文件常用方法实例分析
2015/05/22 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
python远程连接MySQL数据库
2019/04/19 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
计算机系毕业生推荐信
2013/11/06 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书