使用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中的filter()函数的用法
Apr 27 Python
Python中使用urllib2模块编写爬虫的简单上手示例
Jan 20 Python
python采用django框架实现支付宝即时到帐接口
May 17 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
python直接访问私有属性的简单方法
Jul 25 Python
python使用pymysql实现操作mysql
Sep 13 Python
Python读取word文本操作详解
Jan 22 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
python实现画一颗树和一片森林
Jun 25 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 Python
深入理解Pytorch微调torchvision模型
Nov 11 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开发者事半功倍的十大技巧小结
2010/04/20 PHP
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
JQuery 小练习(实例代码)
2009/08/07 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
Python extract及contains方法代码实例
2020/09/11 Python
Django model class Meta原理解析
2020/11/14 Python
经济学人订阅:The Economist
2018/07/19 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
管理科学大学生求职信
2013/11/13 职场文书
高三毕业生自我鉴定
2013/12/20 职场文书
自我鉴定标准格式
2014/03/19 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
给校长的建议书100字
2014/05/16 职场文书
班组拓展活动方案
2014/08/14 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
硕士学位论文评语
2014/12/31 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技