Python抓取图片

news/2024/7/19 11:54:20 标签: Python, 爬虫, 爬取正经的照片

Python爬图片

    • 什么是爬虫
    • 爬虫的分类
    • 君子协定
    • 技术扫盲
    • 爬虫的流程(敲重点啦!!!)
    • request是模块的安装
    • requests模块应用
    • requests对象点属性
    • 网页分析
    • 数据爬取与反爬虫
    • 上代码
  • *特别注意*:

什么是爬虫

爬虫技术:从海量的互联网数据中自动高效的获取我们需要点信息。

定义:请求网站并提供数据的‘自动化’程序。

可以模拟浏览器并自动化从互联网中获取数据的程序。

爬虫的分类

• 通用网络爬虫
• 聚焦爬虫
• 增量式爬虫
• 深层爬虫

君子协定

域名/robots.txt  //查看是否允许爬虫

技术扫盲

(一)
1.客户端 2. 服务器
客户端: 上网的用户。      例如:逛淘宝的我们
服务器: 提供网站的商家。  例如:阿里巴巴

• 逛网站的流程:
1. 客户端 向 服务器 发送请求
2. 服务器接收到请求后,返回一个响应
3. 其中: 客户端就是我们电脑上的浏览器软件,网址相当于目标服务器,服务器本质是别人的电脑的一个软件。
4. 请求: 由客户端发送到服务器的一个信息,用于申请网页。
响应: 由服务器返回到客户端的一个信息,一般是网页,字符串,图片,音乐等内容。

(二)
HTTPHTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,
是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTPS :
	(全称:Hyper Text Transfer Protocol over SecureSocket Layer),
	是以安全为目标的 HTTP 通道,
在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。

(三)
请求的分类:
1. GET请求:可以携带数据,是明文请求,不安全
例如地址栏发送的请求
2. POST请求:密文请求,数据进行了加密,安全
例如表单提交(登录注册)
3. 其他请求:
PUT请求 DELETE请求 HEAD请求 OPTIONS请求 CONNECT TRACE 

(四)
URL: 统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指
定信息位置的表示方法。
简单的来说,就是一个网址或一个地址,用于访问。
这个地址一般包括了服务器地址和服务器中网页的地址

在这里插入图片描述
请求的结构:
在这里插入图片描述
响应的结构:
在这里插入图片描述

爬虫的流程(敲重点啦!!!)

1. 发起请求:
通过HTTP库向目标站点,发起请求,请求可以包含额外的headers等信
息,等待服务器响应。

使用python的请求库调用发送请求的方法,即可发送请求。
• 常见的http请求库有:
• urllib系列 requests请求库 

2. 获取响应内容:
如果服务器能正常响应,会得到一个response,其内容是索要获取的
页面内容,类型可能有HTML,Json字符串,二进制数据(图片,视频)等类型
的内容。

• 使用python的请求库不仅可以发送请求,还可以获得响应内容。
• 得到的响应内容一般是不能直接使用的,需要交给解析库进行解析 。

3. 解析内容:
得到内容如果是HTML,则使用析库进行解析
如果是JSON,可以直接转为JSON对象解析
如果是二进制数据,可以直接做保存或者进一步的处理。

• 使用python的解析库对拿到的响应内容,进行解析。
• 常用的解析库有:
• BeautifulSoup,lxml-xpath,re 

4. 保存数据:
保存形式多样,可以转存为文本,也可以保存至数据库,或者保为存
特定格式的文件。

使用数据库进行存储
• 常用的数据库有:
• mysql oracle mariaDB redis mongoDB 等 

request是模块的安装

1. 基于urllib编写的HTTP请求库
• 2. 更加具有Python的风格,操作更加人性化
• 3. 爬虫中最常用的方式
• 4. 是第三方模块,需要额外安装

• 安装指令: pip install requests (可以使用pycharm安装)
• 导入模块: import requests 

requests模块应用

• 发送get请求: get(url, params=None, **kwargs)
url:访问路径 param:请求参数 headers:请求头内容

• 发送post请求:post(url, data=None, json=None, **kwargs)
url:访问路径 data:请求数据 headers:请求头内容

• 注意:
	发送get/post请求,本质上都是创建了以请求对象,把请求信息放入
到请求对象,底层会自动发送相关数据。

	同时,发送请求后,都会得到一个响应对象,响应对象包含了响应回
来的所有内容(例如网页源代码,图片,json串等)这样我们就可以对响应
的数据进行处理。

requests对象点属性

• 想要拿出对应的数据,可以调用响应对象的不同属性,产生不同效果
• encoding:设置响应编码
• text:返回响应内容的str形式(默认unicode编码方式)
• status_code:返回状态码
# 200:响应成功
# 403:禁止访问---反爬
# 404:数据丢失
# 500:服务器系统错误
• content:返回响应内容的二进制形式
• cookies:返回cookies信息对象
• headers:返回请求头内容
• json:采用json格式输出响应内容

网页分析

• 使用Chrome(谷歌浏览器)
点击F12开启后台抓包工具
访问百度首页就可以看到
网页上的各种信息

• 调试工具中的工具栏:
 Network 中可以看到所有的响应内容
 Doc是Network的子工具,它包括当前的所有html页面
 
• 这里是任何一个调试信息的标签:
• Headers:头信息
• Prewview:视图信息
• Response:响应信息

在这里插入图片描述

数据爬取与反爬虫

• 常见的反爬虫机制与策略
• 1. 通过分析用户请求的Headers信息进行反爬虫
• 网站中应用的最多
• 2. 通过验证用户行为进行反爬虫,
• 例如:通过判断同一个IP在短时间内是否频繁访问对应网站等
进行分析
• 3. 通过动态页面增加爬虫爬取的难度,达到反爬虫的目的

• 对应措施:
• 1.爬虫站控构造用户请求的Headers信息,将爬虫伪装成浏览器
• 2. 使用代理服务器并经常切换代理服务器(IP)
• 3. 利用工具
调试工具: selenium (pip install selenium)

• 注意:
• 1.爬虫不会过于严格,因为可能会误伤到正常用户的使用
•
• 2.爬虫如果要严格且不伤及一般用于,则会加大研发成本
• 3. 简单且低级的爬虫,爬取效率高,但是伪装度低,容易被检测
• 4. 高级爬虫,伪装度高,不易备检测,服务器压力较小,但是爬取效率低

上代码

import requests,re
#1.发起请求
#2.获取响应内容
#3.获取请求
#4.存储数据
#地址在检查-Network-Dox-Headers-
url = '目标URL地址'

headers = { #字典,处理反爬,伪装是从该路径过来的
    'Referer': '伪装URL'
}
#访问目标网站

response = requests.get(url=url,headers=headers)
#print(response.text)
#获得文本数据
data_text = response.text
#对文本数据,截取出图片的路径
image_url = re.findall('middleURL":"(http://img.*?\.jpg)',data_text)#正则表达式
print(image_url)

#设置计数器,用于重命名爬取的图片
n=0
#遍历 图片的链接
for url in image_url:
    #重新发起图片请求
    n+=1
    res=requests.get(url=url,headers=headers)
    print(res.content)
    #res中已经有图片数据---二进制数据
    #使用python的open()函数进行存储
    with open('%d.jpg'%n,'wb') as f:#保存路径
        #存
        f.write(res.content)

特别注意

仅供参考学习,转载请附上原文链接
图片来源于网络、个人收藏、个人制作
该篇文章不做任何商业用途,纯属分享学习心得,如有侵权,望联系本人处理
还在读大学的程序员,项目经验少,如有纰漏,感谢指正
需要源代码请私聊联系本人
谢谢配合

如果这篇文章对您有帮助,小小的点个赞,算是给小学弟的鼓励吧!谢谢大佬!!/呱呱.jpg


http://www.niftyadmin.cn/n/947309.html

相关文章

数据流与数据的加密和解密

数据流与数据的加密和解密数据编码和解码常见的字符集编码方式利用Encoding类实现编码和解码数据流文件流内存流网络流加密流StreamReader和StreamWriter类BinaryReader和BinaryWriter类数据加密与数字签名数据编码和解码 常见的字符集编码方式 ASCIIASCII字符集由128个字符组…

错题整理--系统总线

错题整理1.计算机使用总线结构便于增加外设,同时减少信息传输线的条数。2.计算机使用总线结构的主要优点是便于实现积木化,缺点是两种信息源的代码在总线中不可能同时传送。3.挂接在总线上的多个部件:只能分时向总线发送数据,但可…

计算机组成原理--存储器易考大题

存储器常考大题本章课后题**解释概念:主存、辅存、Cache、RAM、SRAM、DRAM、ROM、PROM、EPROM、EEPROM、CDROM、Flash Memory。****存储器的层次结构主要体现在什么地方?为什么要分这些层次?计算机如何管理这些层次?****说明存取周…

团队开发管理

团队开发管理团队组织与管理项目沟通管理项目计划项目估算团队组织与管理 人力资源规划:识别和记录项目角色、职责、所需技能以及报告关系,并编制人员配备管理计划的过程。 项目团队组建:根据项目人力资源规划,通过有效手段获得项…

SharedPreferences用法

SharedPreferences用法效果:EditText用于用户输入要存储的内容,点击第一个Button键存入。 点击第二个按钮,TextView从该数据结构中取出被存入的内容。直接贴代码: MainActivity.java: package com.example.savedatash…

数据存储(internal,external)

数据存储申请权限:略 MainActivity.java package com.example.saveinfile;import androidx.appcompat.app.AppCompatActivity;import android.content.Context; import android.os.Bundle; import android.os.Environment; import android.util.Log; import androi…

基于UML的软件开发过程

基于UML的软件开发过程UML的概述UML的定义UML的组成UML中的5类图形类图对象图用例图活动图状态机图顺序图通讯图交互图构件图部署图UML的应用领域为什么需要UML? 建模是管理软件开发复杂性的有效手段,使用UML给出的需求规格、总体设计、概要设计、详细设…

Xml序列化器(XmlSerializer类)

XmlSerializer类实现效果上代码注意事项*特别注意*&#xff1a;实现效果 最开始 要保存的内容 点击保存按钮,保存成功 点击读取(读取设置在项目的xml) 点击下一个是指数据一条条读取 上代码 设置读取权限&#xff1a; activity_main.xml <?xml version"…