使用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学习笔记之os模块使用总结
Nov 03 Python
Python scikit-learn 做线性回归的示例代码
Nov 01 Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
python如何实现代码检查
Jun 28 Python
基于python的列表list和集合set操作
Nov 24 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
python实现简单井字棋游戏
Mar 04 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
浅谈Python 参数与变量
Jun 20 Python
python requests模块的使用示例
Apr 07 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下实现农历日历的代码
2007/03/07 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
vue debug 二种方法
2018/09/16 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
python写入xml文件的方法
2015/05/08 Python
浅析Python编写函数装饰器
2016/03/18 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
高级Java程序员面试题
2016/06/23 面试题
煤矿安全承诺书
2014/05/22 职场文书
读书月活动方案
2014/05/22 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
创业计划书介绍
2019/04/24 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
Python OpenCV形态学运算示例详解
2022/04/07 Python