使用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 list转dict示例分享
Jan 28 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 Python
利用Python实现网络测试的脚本分享
May 26 Python
对python中的pop函数和append函数详解
May 04 Python
Django框架实现逆向解析url的方法
Jul 04 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
Python新手学习标准库模块命名
May 29 Python
Python基于Twilio及腾讯云实现国际国内短信接口
Jun 18 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
15个小时----从修改程序到自己些程序
2006/10/09 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
Python实现的Kmeans++算法实例
2014/04/26 Python
python实现中文转换url编码的方法
2016/06/14 Python
Python爬取京东的商品分类与链接
2016/08/26 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python hmac模块使用实例解析
2019/12/24 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
函授毕业自我鉴定
2014/02/04 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android