首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

爬虫案例1-爬取图片的三种方式之一:requests篇(1)

  • 25-02-22 00:20
  • 4276
  • 10238
blog.csdn.net

目录

  • 前言
  • 导航
  • 爬虫步骤
    • 发起请求
    • 获取数据
    • 解析内容
    • 存储数据
  • 完整源码
      • 运行截图
      • 成果
  • 共勉
  • ps
  • 博客

前言

本文分享一个爬虫案例,使用requests库爬取彼岸网中的动物的图片,利用parsel库进行数据解析,并把这些照片保存到本地。后续也会接着分享使用第三方库selenium篇和DrissionPage篇爬取图片。

导航

  • 爬虫案例1-爬取图片的三种方式之一:requests篇(1)
  • 爬虫案例1-爬取图片的三种方式之一:selenium篇(2)
  • 爬虫案例1-爬取图片的三种方式之一:DrissionPage篇(3)
  • 爬虫案例2-爬取视频的三种方式之一:requests篇(1)
  • 爬虫案例2-爬取视频的三种方式之一:selenium篇(2)
  • 爬虫案例2-爬取视频的三种方式之一:DrissionPage篇(3)

爬虫步骤

发起请求

确定要爬取的目标网站后要先发起请求,我们要发送请求需要依赖requests库,爬虫实质上是模拟浏览器的行为,所以还要加上模拟浏览器的标识,即下面headers中的Users-Agent。代码如下:

import requesets # 数据请求模块
# 请求url
url='https://pic.netbian.com/e/search/result/?searchid=147'
# 请求头  Users-Agent为浏览器的标识
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

获取数据

发送请求我们会的获得响应的数据,下面我们就要对数据内容进行分析。
获取到的数据常见的格式有json、text(HTML文本)和XML格式。
还有后面获取到的图片是二进制(content)格式的数据。

# 获取响应数据
response = requests.get(url, headers=headers).text
  • 1
  • 2

解析内容

解析数据有很多种方式,常用的包括但不限于xpath,正则表达式,lxml,Beautiful Soup等等,今天我们来用一下第三方库parsel。
使用parsel库首先需要创建一个Selector对象,然后利用css选择器来解析其中照片数据。
parsel库支持Xpath、css选择器以及正则表达式来提取数据。不了解parsel库的语法的同学可以先去了解下。

selector=parsel.Selector(response.text)     # 创建一个个Selector对象
    data_li=selector.css('.slist ul li')         # 利用css选择器提取图片的数据
    for li in data_li:									# 遍历
        img_src=li.css('a img::attr(src)').get()       # 每个图片的网址
        title=li.css('a b::text').get()                 # 图片的的名字
        title=title.replace(' ','').replace("*",'-')	# 把其中的空格和特殊字符*替换掉
        de_src='https://pic.netbian.com'+img_src  # 完整的图片地址
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

存储数据

利用第三方库parsel的css选择器获取到数据后,我们就需要存储数据了。可以存储到到excel表格中,也可以存储到数据库中,我们这次先存储到本地。

img_data=requests.get(de_src,headers=headers).content    # 获取图片的二进制数据
with open('./images/'+title+'.jpg','wb') as f:                             # 存储到本地
      f.write(img_data)
  • 1
  • 2
  • 3

完整源码

import requests # 数据请求模块
import parsel   # 数据解析模块
import os  # 文件管理模块
import re # 正则表达式模块

# 请求头
url='https://pic.netbian.com/e/search/result/?searchid=147'
# 请求体
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
}
# 使用os库创建目录images
if not os.path.exists('./images'):
    os.mkdir('./images')
res=0          # 计算爬取到的总的照片数
for num in range(0,15): # 多页爬取 爬取15页
    url=f'https://pic.netbian.com/e/search/result/index.php?page={num}&searchid=147'
    response = requests.get(url, headers=headers)  # 获取请求内容
    selector=parsel.Selector(response.text)     # 创建一个个Selector对象
    data_li=selector.css('.slist ul li')         # 利用css标签提取照片的数据
    for li in data_li:
        img_src=li.css('a img::attr(src)').get()       # 照片的网址
        title=li.css('a b::text').get()                 # 照片的的名字
        title=title.replace(' ','').replace("*",'-')    # 把其中的空格和特殊字符*替换掉
        de_src='https://pic.netbian.com'+img_src
        img_data=requests.get(de_src,headers=headers).content  # 获取图片的二进制数据
        with open('./images/'+title+'.jpg','wb') as f:   # 保存到本地
            f.write(img_data)
        print("已下载:",title,"网址为:",de_src)
        res+=1
    print(f'第{num}页爬取完成')
print(f'共爬取{res}张')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

运行截图

在这里插入图片描述

成果

在这里插入图片描述

共勉

如果你赶不上凌晨五点的日出,不妨去看看傍晚六点的夕阳!

ps

  • 当爬取到的数据过多的时候,可能面临着封ip的可能,这时候就得需要代理。需要带代理的源码私信d我一下。
  • 保存图片的时候,可能会因为特殊字符的原因报错,记得替换掉。
  • 最后:爬虫有风险,希望大家遵守robots协议。

博客

  • 本人是一个渗透爱好者,不时会在微信公众号(laity的渗透测试之路)更新一些实战渗透的实战案例,感兴趣的同学可以关注一下,大家一起进步。
    • 之前在公众号发布了一个kali破解WiFi的文章,感兴趣的同学可以去看一下,在b站(up主:laity1717)也发布了相应的教学视频。
注:本文转载自blog.csdn.net的小小啊python的文章"https://blog.csdn.net/qq_67581528/article/details/141225187"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top