使用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中的集合类型操作符
Aug 19 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
python样条插值的实现代码
Dec 17 Python
Python按钮的响应事件详解
Mar 04 Python
django-初始配置(纯手写)详解
Jul 30 Python
用Python徒手撸一个股票回测框架搭建【推荐】
Aug 05 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
Python接口测试get请求过程详解
Feb 28 Python
python实现简单井字棋游戏
Mar 04 Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 Python
python如何对链表操作
Oct 10 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与SQL注入攻击[三]
2007/04/17 PHP
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
如何实现JS函数的重载
2006/09/22 Javascript
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
python实现udp数据报传输的方法
2014/09/26 Python
在Python下尝试多线程编程
2015/04/28 Python
Python上传package到Pypi(代码简单)
2016/02/06 Python
python实现梯度下降算法
2020/03/24 Python
python requests指定出口ip的例子
2019/07/25 Python
Python实现FLV视频拼接功能
2020/01/21 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
Python pip 常用命令汇总
2020/10/19 Python
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
《寓言两则》教学反思
2014/02/27 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
开幕式邀请函
2015/01/31 职场文书
中秋节主题班会
2015/08/14 职场文书
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技