使用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 正则式使用心得
May 07 Python
一篇文章入门Python生态系统(Python新手入门指导)
Dec 11 Python
Python max内置函数详细介绍
Nov 17 Python
Python生成器以及应用实例解析
Feb 08 Python
详谈python3中用for循环删除列表中元素的坑
Apr 19 Python
python+pyqt5实现KFC点餐收银系统
Jan 24 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
pandas和spark dataframe互相转换实例详解
Feb 18 Python
Python应用实现处理excel数据过程解析
Jun 19 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
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
Angular刷新当前页面的实现方法
2018/11/21 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
Python实现快速计算词频功能示例
2018/06/25 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
《画风》教学反思
2014/04/16 职场文书
2015年安全生产责任书
2015/01/30 职场文书
交通事故调解协议书
2015/05/20 职场文书
请客吃饭开场白
2015/06/01 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书