Python爬虫图片及相关知识讲解

1. 导入所需依赖

pip install requests  # 导入request库,用于发起网络请求re    # python自带,不需要导入,正则表达式库,用于匹配规则
os    # 系统库,用于操作文件夹、文件

2. requests库介绍

以下是 requests 库的一些主要特点和功能:

发送 HTTP 请求:requests 提供了多种发送 HTTP 请求的方法,包括 GET、POST、PUT、DELETE 等。通过使用这些方法,可以轻松地发送请求到指定的 URL,并获取服务器响应。爬虫发起的请求基本就是GET。

 # 1. 发送 GET 请求
response = requests.get('https://api.example.com')# 2. 传递查询参数
params = {'key': 'value'}
response = requests.get('https://api.example.com', params=params)# 3. 设置请求头部
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('https://api.example.com', headers=headers)response = requests.get('https://api.example.com')
print(response.status_code)  # 打印状态码
print(response.text)  # 打印响应内容
print(response.json())  # 解析为 JSON 对象
print(response.content.decode()) # decode可设置编码# 发送 POST 请求
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://api.example.com', data=payload)
# 请求参数和头部:requests 允许在发送请求时传递参数和自定义头部信息。可以通过传递参数字典或设置请求头部来实现。

3. re库介绍

在Python中,re库是一个用于处理正则表达式的内置标准库。正则表达式是一种强大的文本匹配和处理工具,使用它可以进行文本搜索、替换、分割等操作。re库提供了一系列函数,允许你使用正则表达式来对字符串进行复杂的模式匹配和处理。

以下是re库常用的一些函数:

  • re.match(pattern, string):从字符串开头开始匹配,如果匹配成功返回匹配对象,否则返回None。
  • re.search(pattern, string):在字符串中搜索匹配,如果匹配成功返回匹配对象,否则返回None。
  • re.findall(pattern, string):返回字符串中所有与模式匹配的子串组成的列表。
  • re.sub(pattern, repl, string):使用repl替换字符串中与模式匹配的子串。
  • re.split(pattern, string):使用模式分割字符串,并返回由分割后的子串组成的列表。

除了这些基本函数之外,re库还提供了一些其他功能,例如支持捕获组、忽略大小写、多行模式等等。使用re库,你可以进行复杂的模式匹配,从而实现对文本的高效处理和提取。

总的来说,re库在Python中的作用是提供了强大的正则表达式功能,使得我们可以轻松地进行文本匹配、提取和处理,是处理文本数据时非常有用的工具之一。

正则表达式中的 pattern 是用来定义匹配规则的字符串。它由各种特殊字符和普通字符组成,用于指定我们要匹配的文本模式。

下面是一些常用的正则表达式特殊字符和符号:

  • .:匹配除换行符以外的任意字符。
  • *:匹配前一个字符零次或多次。
  • +:匹配前一个字符一次或多次。
  • ?:匹配前一个字符零次或一次。
  • ^:匹配字符串的起始位置。
  • $:匹配字符串的结束位置。
  • \d:匹配任意数字字符。
  • \w:匹配任意字母数字字符。
  • \s:匹配任意空白字符。
  • [ ]:用于定义字符集,匹配其中任意一个字符。
  • [^ ]:用于否定字符集,匹配不在其中的任意字符。
    除了上述特殊字符之外,我们还可以使用括号 () 来创建捕获组,并使用 | 来表示多个模式的选择。

例如,假设我们想要匹配一个由数字和字母组成的字符串,可以使用正则表达式 [\w]+,其中 [] 定义了一个字符集,\w 表示任意字母数字字符,+ 表示前一个字符可以出现一次或多次。

另外,为了方便使用正则表达式,我们可以使用 re.compile() 方法将 pattern 编译成 Pattern 对象。这样可以提高性能,并且可以重复使用编译后的对象进行匹配操作。

4. os库介绍

os 是 Python 内置的一个标准库,提供了许多与操作系统相关的功能和接口,可以让你更方便地访问文件系统、处理文件路径、获取环境变量等。

下面是 os 库中一些常用的功能:

  • os.getcwd():获取当前工作目录的路径。
  • os.chdir(path):改变当前工作目录到指定的路径。
  • os.listdir(path):返回指定目录下所有文件和子目录的列表。
  • os.path.join(path, *paths):将多个路径组合成一个路径。
  • os.path.abspath(path):返回指定路径的绝对路径。
  • os.path.split(path):将路径分解为目录和文件名两部分。(根据文件名后缀分解)
  • os.path.splitext(path):将路径分解为文件名和扩展名两部分。
  • os.path.basename(path):返回指定路径中的文件名部分。
  • os.path.dirname(path):返回指定路径中的目录部分。
  • os.path.isdir(path):检测给定的路径是否是一个目录。
  • os.path.isfile(path):检测给定的路径是否是一个文件。
  • os.makedirs(name):创建[递归]目录。
  • os.mkdir(path):创建指定路径的目录。
  • os.rename(src, dst):将文件或目录从源路径重命名为目标路径。
  • os.remove(path):删除指定路径的文件。
  • os.rmdir(path):删除指定路径的空目录。
  • os.path.exists(path):检查指定路径是否存在。
  • os.path.getsize(path):获取指定文件的大小(以字节为单位)。
  • os获取当前用户桌面路径
    import os
    desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
    print(desktop_path)
    

另外,os 库还提供了一些与进程和环境变量相关的功能,如 os.environ 可以获取系统环境变量,os.system(command) 可以执行系统命令等等。这使得 Python 能够与操作系统交互,执行各种任务。

5. 图片爬取

import re
import requests
import os# 1.拿到url
str = input("请输入你要爬取的内容:")
if not os.path.exists(str):  # 判断是否存在这个文件夹,如果没有就创建一个以‘str’为名字的文件夹os.mkdir(str)#UA:User-Agent(请求载体的身份标识)
#UA检测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识额为某一款浏览器
#说明该请求时一个正常的请求,但是,如果检测到请求的载体身份标识不是基于某一款浏览器的,则表示该请求为
#不正常的请求(爬虫),则服务器端就很可能拒绝该请求。
#UA伪装:让爬虫对应的请求载体身份标识为某一款浏览器#UA伪装:将对应的User-agent封装到一个字典中
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
url = "https://image.so.com/i?src=360pic_strong&z=1&i=0&cmg=15484592.&q=%s" % str# url="https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%s"%str# 2.拿到网页源代码
r = requests.get(url=url, headers=headers)  # 利用requests模块来获取当前这个url的信息,得到数据# ret = r.text  # ret得到的就是网页源代码,与下一条作用相同
ret = r.content.decode()  # ret得到的就是网页源代码,decode()括号中的内容不写默认为‘utf-8'编码# 3.拿到所有图片的url(链接地址)
result = re.findall('"thumb_bak":"(.*?)",', ret)  # result是一个列表,根据图片的网页地址匹配,url为thumb_bak和,中的内容,即(.*?)# 4. 输入要爬取的图片数量
txt = '请输入要爬取的图片数量(< %s):' % len(result)
picNum = int(input(txt))
num = 0# 4.保存所有图片
for i in result:i = re.sub(r'\\', '', i)  # 与上面的for循环功能一致print(i)r = requests.get(i)  # 利用requests模块来获取当前这个url的信息,得到数据path = i[-15:]  # 以url的结尾后十位命名end = re.search('(\.jpg|\.jpeg|\.gif|\.png)$', path)  # 加转义字符使小数点成为我们想要的,‘|’为或者,‘$'为以什么结尾,这里指或者以jpg结尾if end is None:  # 如果后十位不以上面的内容结尾,则在后面加.jpgpath = path + 'rought.jpg'with open(str + '/' + path, 'wb') as f:f.write(r.content)num = num + 1if num == picNum:break

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIP-七、IS-IS 综合实验

七、IS-IS 综合实验 实验拓扑实验需求及解法1.如图所示&#xff0c;配置所有路由器的接口IP地址。2.运行IS-IS&#xff0c;进程号13.IS-IS优化4.路径优化 实验拓扑 实验需求及解法 本实验模拟IS-IS综合网络&#xff0c;完成以下需求&#xff1a; 1.如图所示&#xff0c;配置所…

指针的使用和传址调用

1.引入 学习指针的⽬的是使⽤指针解决问题&#xff0c;那什么问题&#xff0c;⾮指针不可呢&#xff1f; 例如&#xff1a;写⼀个函数&#xff0c;交换两个整型变量的值。 ⼀番思考后&#xff0c;我们可能写出这样的代码&#xff1a; #include <stdio.h> void Swap1(int…

2017年7月13日 Go生态洞察:向Go 2迈进

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

影刀RPA_boss直聘翻页(避坑)

boss直聘翻页这里有个坑 问题&#xff1a; 无限循环中&#xff0c;点击下一页按钮&#xff0c;直到不可点击为止。 发现&#xff0c;在点到第5页的时候&#xff0c;再次点击下一页&#xff0c;直接就点击了页码10&#xff0c;导致流程直接就结束了。 在第5页进行校验&#xff0…

Unity 场景切换

Unity场景切换可使用以下方法&#xff1a; 1、SceneManager.LoadScene()方法&#xff1a; using UnityEngine.SceneManagement;// 切换到Scene2场景 SceneManager.LoadScene("Scene2"); 2、使用SceneManager.LoadSceneAsync()方法异步加载场景&#xff0c;异步加载…

2005-2023年6月中国全球投资追踪数据(China-Global-Investment-Tracker-2023-Spring)

2005-2023年6月中国全球投资追踪数据&#xff08;China-Global-Investment-Tracker-2023-Spring&#xff09; 1、时间;2005-2023年6月 2、来源&#xff1a;American Enterprise Institute 3、指标&#xff1a;Year、Month、Investor、Quantity、in、Millions、Share、Size、…

大一统模型 Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记

Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记 一、Abstract二、引言三、相关工作实例感知通过类别名进行检索通过语言表达式的检索通过指代标注的检索 统一的视觉模型Unified Learning ParadigmsUnified Model Architectures 四、方法4.1 Pr…

罗技M590鼠标usb优联连接不上

手里有一个罗技M590鼠标从18年4月一直用到现在&#xff0c;质量很好&#xff0c;除了滚轮有些松别的没毛病。最近一台笔记本电脑办公不太够用&#xff0c;又领了一个台式机&#xff0c;就想到M590支持双模连接&#xff0c;并且支持Flow&#xff0c;就把usb优联接收器从电池仓拿…

Java学习路径:入门学习、深入学习、核心技术,操作案例和实际代码示例

学习路径&#xff1a;入门学习、深入学习、核心技术&#xff0c; 每个主题都包括很多的操作案例和实际代码示例。 a. 入门学习&#xff1a; 1. 基础语法&#xff1a; 变量和数据类型&#xff1a; // 定义和初始化变量 int age 25;// 不同数据类型的声明 double price 19.99…

React基础入门

文章目录 创建项目组件和事件更新状态导出组件jsx react是目前最流行的前端框架&#xff0c;几乎也不用太介绍了。 创建项目 首先下载node.js&#xff0c;安装成功后&#xff0c;最好换成国内的源 npm config set registry https://registry.npm.taobao.org然后就可以使用脚…

AI动画制作 StableDiffusion

1.brew -v 2.安装爬虫项目包所必需的python和git等系列系统支持部件 brew install cmake protobuf rust python3.10 git wget pod --version brew link --overwrite cocoapods 3.从github网站克隆stable-diffusion-webui爬虫项目包至本地 ssh-add /Users/haijunyan/.ssh/id_rs…

jQuery 第十一章(表单验证插件推荐)

文章目录 前言jValidateZebra FormjQuery.validValValidityValidForm BuilderForm ValidatorProgressionformvalidationjQuery Validation PluginjQuery Validation EnginejQuery ValidateValidarium后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&…

入门指南:介绍Python库——Pandas

个人网站 本文首发于公众号小肖学数据分析 Pandas是一个功能强大、灵活易用的Python数据处理库。 无论你是数据分析师、数据科学家还是Python初学者&#xff0c;掌握Pandas都将为你提供高效、便捷的数据处理和分析能力。 本文将为你详细介绍Pandas的基本概念、常用功能和使…

mysql 更改密码

由于两台设备的mysql数据库的密码不一样&#xff0c;开发时每次连接数据库都需要更改配置文件&#xff0c;所以想修改一下mysql数据库的密码。 mysql 修改密码千万不要直接修改&#xff0c;直接修改的话会出现两种情况&#xff1a; 1&#xff0c;修改成功&#xff0c;无法登录。…

为人基本操守

“Not all of us can do great things, but we can do small things with great love.” “我们此生中可能很难成就大事&#xff0c;但是我们可以在小事中成就大爱。” 希望同学们在今后的人生中&#xff0c;坚持走正道&#xff0c;做好人&#xff0c;关怀身边及远方的弱势人群…

jQuery_06 基本过滤器的使用

什么是过滤器&#xff1f; 过滤器就是用来筛选dom对象的&#xff0c;过滤器是和选择器一起使用的。在选择了dom对象后在进行过滤筛选。 jQuery对象中存储的dom对象顺序与页面标签声明有关系。 声明顺序就是dom中存放的顺序 1.基本过滤器 使用dom对象在数组中的位置来作为过滤条…

基于时隙的多重冗余流指纹模型

文章信息 论文题目&#xff1a;基于时隙的多重冗余流指纹模型 期刊&#xff08;会议&#xff09;&#xff1a;网络与信息安全学报 时间&#xff1a;2023 级别&#xff1a;CCF C 概述 为确保内生网络流量安全可信&#xff0c;本文在研究流水印及其扩展的流指纹机制的基础上&a…

小程序中的大道理之二--抽象与封装

继续扒 接着 上一篇 的叙述, 健壮性也有了, 现在是时候处理点实际的东西了, 但我们依然不会一步到底, 让我们来看看. 一而再地抽象(Abstraction Again) 让我们继续无视那些空格以及星号等细节, 我们看到什么呢? 我们只看到一整行的内容, 当传入 3 时就有 3 行, 传入 4 时就…

明道云伙伴成果与展望

摘要&#xff1a;这篇文章介绍了明道云在过去一年的成果以及未来的计划。明道云将把更多资源和精力投入到伙伴身上&#xff0c;提供更全面的支持&#xff0c;包括产品特性、展业支持和 GTM &#xff08;Go-To-Market&#xff09;支持三个方面。在产品特性方面&#xff0c;明道云…

算法基础之KMP算法

KMP算法 核心思想: 回退处理 和 next前缀数组 ne[N]前缀数组表示 模式串当前位置的最长相当前后缀 当一个字符不匹配时 可以回退到上一个前后缀相等的位置 再次开始匹配 不用再遍历一次 #include <iostream>using namespace std;const int N 100010, M 1000010;int…