【网络爬虫】(2) requests模块,案例:网络图片爬取,附Python代码

1. 基本原理

1.1 requests 模块

requests 是 Python 中一个非常流行的 HTTP 客户端库,用于发送所有的 HTTP 请求类型。它基于 urllib,但比 urllib 更易用。

中文文档地址:Requests: 让 HTTP 服务人类 — Requests 2.18.1 文档

(1)requests.get(url, **kwargs)

requests.get() 函数是 requests 库中用于发送 HTTP GET 请求的主要函数GET 请求通常用于从服务器请求数据,而不发送任何数据到服务器(尽管可以通过查询参数发送少量数据)。下面我将介绍 requests.get 函数的参数、用法,并给出一个简短的例子。

参数:

url (str): 请求的 URL。这是 requests.get 必须的参数,想要请求的网页或资源的地址

params (dict, optional): 一个字典或字节序列,作为查询参数增加到 url 中。例如,params={'key1': 'value1', 'key2': 'value2'} 将会以 key1=value1&key2=value2 的形式附加到 URL 上。

headers (dict, optional): 自定义 HTTP 头。例如,可以通过 headers={'User-Agent': 'my-app/0.0.1'} 来设置用户代理。

cookies (dict, optional): 字典或 CookieJar,包含要发送的 cookie。

timeout (float or tuple, optional): 以秒为单位的请求超时时间。可以是单个浮点数(连接超时和读取超时相同),或者是一个元组,分别指定连接超时和读取超时。

allow_redirects (bool, optional): 是否允许重定向。默认为 True。

proxies (dict, optional): 字典映射协议或协议和主机名到 URL。

verify (bool or str, optional): 是否验证 SSL 证书。默认为 True。可以提供一个 CA_BUNDLE 文件的路径。

stream (bool, optional): 是否立即下载响应内容。默认为 False。如果想逐渐下载大型响应,可以设置为 True。

返回值:

requests.get 函数返回一个 Response 对象该对象包含服务器响应的所有信息,如状态码、响应头、响应体等。

例子:
import requests  # 定义请求的 URL  
url = 'http://www.umeituku.com/bizhitupian/fengjingbizhi/'  # 发送 GET 请求  
response = requests.get(url)  # 检查请求是否成功  
if response.status_code == 200:  # 读取响应内容  data = response.text  print("请求成功,响应内容为:")  print(data)  
else:  # 请求失败,打印错误信息  print(f"请求失败,状态码:{response.status_code}")  print(response.text)  # 你也可以直接使用 response.json() 方法解析 JSON 响应  
if response.headers.get('content-type') == 'application/json':  data = response.json()  print("解析 JSON 响应成功:")  print(data)

(2)requests.post(url, data=None, json=None, **kwargs)

requests.post() 函数是 requests 库中用于发送 HTTP POST 请求的函数POST 请求通常用于向服务器提交数据,例如提交表单或上传文件与 GET 请求不同,POST 请求会将数据包含在请求体中发送给服务器。下面我将详细介绍 requests.post 函数的参数、用法,并给出一个简短的例子。

参数:

url (str): 请求的 URL。这是 requests.post 函数必须的参数,代表你想要发送 POST 请求的网页或资源的地址。

data (dict, bytes, or file-like object, optional): 要发送的表单数据。如果是字典,它将被转换为表单编码格式。

json (dict, optional): 要发送的 JSON 数据。如果提供此参数,content-type 头将自动设置为 application/json。

headers (dict, optional): 自定义 HTTP 头。

cookies (dict, optional): 字典或 CookieJar,包含要发送的 cookie。

files (dict, optional): 要上传的文件。字典中的键是表单字段名,值是文件元组 (filename, fileobj, content_type, content_encoding)。

auth (tuple, optional): 用于身份验证的元组,如 ('user', 'pass')。

timeout (float or tuple, optional): 以秒为单位的请求超时时间。

proxies (dict, optional): 字典映射协议或协议和主机名到 URL。

verify (bool or str, optional): 是否验证 SSL 证书。

stream (bool, optional): 是否立即下载响应内容。

cert (tuple, optional): 客户端证书和其密钥的元组。

返回值:

requests.post 函数返回一个 Response 对象与 requests.get 函数的返回值类似,该对象包含服务器响应的所有信息,如状态码、响应头、响应体等

例子:
import requests  # 定义请求的 URL  
url = 'http://www.umeituku.com/bizhitupian/fengjingbizhi/'  # 准备要发送的数据  
data = {  'username': 'my_username',  'password': 'my_password'  
}  # 发送 POST 请求  
response = requests.post(url, data=data)  # 检查请求是否成功  
if response.status_code == 200:  # 读取响应内容  print("登录成功,响应内容为:")  print(response.text)  
else:  # 请求失败,打印错误信息  print(f"登录失败,状态码:{response.status_code}")  print(response.text)

(2)requests.put(url, data=None, **kwargs)

requests.put() 函数requests 库中用于发送 HTTP PUT 请求的函数PUT 请求通常用于更新服务器上的资源与 POST 请求不同,PUT 请求的意图是替换服务器上指定资源的内容。下面我将详细介绍 requests.put 函数的参数、用法,并给出一个简短的例子。

参数:

url (str): 请求的 URL。这是 requests.put 函数必须的参数,代表你想要发送 PUT 请求的资源的地址。

data (dict, bytes, or file-like object, optional): 要发送的数据。如果是字典,它将被转换为表单编码格式。这通常用于更新资源的内容。

json (dict, optional): 要发送的 JSON 数据。如果提供此参数,content-type 头将自动设置为 application/json。

headers (dict, optional): 自定义 HTTP 头。

cookies (dict, optional): 字典或 CookieJar,包含要发送的 cookie。

auth (tuple, optional): 用于身份验证的元组,如 ('user', 'pass')。

timeout (float or tuple, optional): 以秒为单位的请求超时时间。

proxies (dict, optional): 字典映射协议或协议和主机名到 URL。

verify (bool or str, optional): 是否验证 SSL 证书。

stream (bool, optional): 是否立即下载响应内容。

cert (tuple, optional): 客户端证书和其密钥的元组。

返回值:

requests.put 函数返回一个 Response 对象与 requests.get 和 requests.post 函数的返回值类似。这个对象包含了服务器的响应信息,比如状态码、响应头、响应体等

例子:
import requests  
import json  # 定义请求的 URL  
url = 'http://www.umeituku.com/bizhitupian/fengjingbizhi/'  # 准备要更新的数据  
data = {  'name': 'Updated Name',  'description': 'This resource has been updated.'  
}  # 将数据转换为 JSON 格式  
data_json = json.dumps(data)  # 发送 PUT 请求  
response = requests.put(url, data=data_json, headers={'Content-Type': 'application/json'})  # 检查请求是否成功  
if response.status_code == 200:  # 读取响应内容  print("资源更新成功,响应内容为:")  print(response.text)  
else:  # 请求失败,打印错误信息  print(f"资源更新失败,状态码:{response.status_code}")  print(response.text)

2. 图片爬取案例

2.1 案例介绍

这个案例通过发送HTTP请求、解析HTML页面、提取图片链接、下载图片并保存到本地等步骤,实现从指定网页爬取图片的功能。

案例使用的爬取网址:http://www.umeituku.com/bizhitupian/fengjingbizhi/

2.2 Python代码

代码如下:

import requests  # 发送请求,从服务器获取数据
from bs4 import BeautifulSoup  # 解析页面的源代码
n = 1  # 保存图片的计数器# 发送请求到服务器
url = 'http://www.umeituku.com/bizhitupian/fengjingbizhi/'  # 图片网站地址
resp = requests.get(url)  # 从服务器拿到网址, 返回响应
resp.encoding = 'utf-8'  # 重新编码utf-8
# 解析html--返回页面
main_page = BeautifulSoup(resp.text, 'html.parser')
# 在页面中找标签'div'的TypeList属性
typelist = main_page.find('div', attrs={'class':'TypeList'})
alst = typelist.find_all('a', attrs={'class':'TypeBigPics'})  # 所有的图片链接
# 从标签中获取每张图片的链接
for a in alst:href = a.get('href') # 发送请求到子页面,进入图片页面resp1 = requests.get(href) # 从服务器拿到网址resp1.encoding = 'utf-8'  # 重新编码utf-8child_page = BeautifulSoup(resp1.text, 'html.parser')  # 源代码解析,获取子页面# 获取所有图片路径src_att = child_page.find('div', attrs={'class':'ImageBody'})  # 找到子页面中图片属性src = src_att.find('img').get('src')  # 子页面中找到src图片路径# 创建文件f = open('tu%s.jpg'%n, mode='wb')  # 写入文件,内容是非文本文件,保存的文件名# 发送请求到服务器,把图片保存到本地f.write(requests.get(src).content)print('完成一次')n += 1  # 图片计数器

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

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

相关文章

OpenHarmony 源码解析之SystemUi—Statusbar(TS)

作者:董伟 简介 SystemUI应用是OpenHarmony中预置的系统应用,为用户提供系统相关信息展示及交互界面,包括系统状态、系统提示、系统提醒等,例如系统时间、电量信息。 本文主要分析batterycomponent、clockcomponent、wificompo…

[Windows常用软件] word 复制粘贴报错修复

背景 在word 内 ctrlv 会报这个错。 microsoft visual basic MathPage.Wll 运行时错误 网上查了一下是 mathtype 导致的,应该是我之前卸载 mathtype 没有卸载干净导致的。 解决方案 参考知乎里面的一个回答解决的:https://www.zhihu.com/question/37…

高防服务器、高防IP、高防CDN的工作原理是什么

高防IP高防CDN我们先科普一下是什么是高防。“高防”,顾名思义,就犹如网络上加了类似像盾牌一样很高的防御,主要是指IDC领域的IDC机房或者线路有防御DDOS能力。 高防服务器主要是比普通服务器多了防御服务,一般都是在机房出口架设…

网络七层模型之网络层:理解网络通信的架构(三)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

centos 7安装pgsql14

参考 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm终端直接运行:yum install -y postgresql14-server 1. 初始化数据库 使用yum安装后,会在系统中创建一个postgres的无密码…

【快速解决】谷歌浏览器驱动的安装及selenium的安装

目录 快速安装Selenium 快速下载对应谷歌驱动 找不到对应版本号的解决方法 快速安装Selenium 安装 Selenium 环境就用下面的代码进行安装👇👇👇👇👇 pip install selenium3.141.0 快速下载对应谷歌驱动 点击这个链接…

关于RPC

初识RPC RPC VS REST HTTP Dubbo Dubbo 特性: 基于接口动态代理的远程方法调用 Dubbo对开发者屏蔽了底层的调用细节,在实际代码中调用远程服务就像调用一个本地接口类一样方便。这个功能和Fegin很类似,但是Dubbo用起来比Fegin还要简单很多&a…

pe启动盘破解windows密码wins电脑登录密码修改重置

目录 1.进入电脑BIOS,设置电脑第一启动项为U盘启动2.进入微pe系统3.然后点击界面最左下方的Windows图标4.点击windows密码选择对应用户名称修改; 1.进入电脑BIOS,设置电脑第一启动项为U盘启动 把u盘插到要清除密码的电脑,然后开机…

Java语法学习 正则表达式

Java语法学习 正则表达式 大纲 具体案例 需求:使用正则表达式完成对文本的查询,regular expression(正则表达式) 源码解析group package com.wantian.regular;import java.util.regex.Matcher; import java.util.regex.Patt…

日新增百万数据clickhouse大数据解决方案记录分享

公司广告业务需求,需要多个维度统计每个应用的设备数,点击率,展示率,等相关数据,而且数据需要进行去重,我第一时间想到的是利用clickhouse来做统计,因为我们平台访问量比较大,用mysq…

浅谈WPF之MVVM工具包

在之前的WPF示例中,都会用到一个MVVM框,也是一个比较常的MVVM框架,就是MVVM工具包【CommunityToolkit.Mvvm】,今天专门以一个简单的小例子,简述一下MVVM工具包的常见用法,仅供学习分享使用,如有…

选项式API和组合式API的区别

选项式(options) API 和组合式(composition) API两种不同的风格书写,Vue3 的组件可以使用这两种api来编写。 选项式API和组合式API的区别 选项式API 选项式 API,具有相同功能的放在一起,可以用包含多个选项的对象来描述组件的逻辑&…

WPF---1.入门学习

学习来源 布局 wpf布局原则 一个窗口中只能包含一个元素 不应显示设置元素尺寸 不应使用坐标设置元素的位置 可以嵌套布局容器 StackPanel-->表单条件查找布局 DataGrid wpf布局容器 StackPanel: 水平或垂直排列元素,Orientation属性分别: Horizontal / Vertic…

Java数据结构-ArrayList

目录 1. 初识集合框架2. ArrayList的介绍3. ArrayList的使用3.1 构造方法3.2 add3.3 addAll3.4 remove3.5 get3.6 set3.7 contains3.8 IndexOf3.9 lastIndexOf3.10 subList 4. ArrayList的遍历4.1 简单粗暴法4.2 循环遍历法4.3 迭代器 1. 初识集合框架 Java集合框架是Java编程…

基于OneAPI+ChatGLM3-6B+FastGPT搭建LLM大语言模型知识库问答系统

搭建大语言模型知识库问答系统 部署OneAPI部署一个LLM模型部署嵌入模型部署FastGPT新建FastGPT对话应用新建 FastGPT 知识库应用 部署OneAPI 拉取镜像 docker pull justsong/one-api创建挂载目录 mkdir -p /usr/local/docker/oneapi启动容器 docker run --name one-api -d …

粘包/半包及解决方案

一、粘包/半包介绍 1:粘包 粘包(Packet Concatenation)通常发生在基于流式传输协议(如 TCP)的通信中,因为 TCP 是面向流的传输协议,它不保证数据包的边界,而是将数据视为连续的字节…

密码学及其应用1 —— 密码学概述

1 密码学的基本概念 1.1 网络安全的定义 网络安全是网络领域的一个专业领域,它涵盖了在基础计算机网络基础设施中所采取的措施、网络管理员为保护网络及网络可访问资源免受未授权访问而采纳的政策,以及对其有效性(或无效性)的持续…

2024年2月线上助听器综合电商(京东天猫淘宝)热销排行榜

鲸参谋监测的综合电商平台(京东天猫淘宝)2月份助听器品牌销量销额排行榜已揭晓! 根据鲸参谋电商大数据显示,2月助听器在综合电商平台销量约为19万,环比上个月下滑了2%,同比去年下滑了25%;销售额…

基于nodejs+vue发艺美发店管理系统python-flask-django-php

系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对发艺美发店管理的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的…

javaSwing愤怒的小鸟游戏

一、简介 游戏名称是“愤怒的小鸟”,英文称为“AngryBird”。 “愤怒的小鸟”是著名游戏公司Rovio偶然间开发出来的益智游戏,从2009年12月上市到iOS。,讲述了鸟类和猪因为猪偷鸟蛋反生的一系列故事。游戏的类型版本是横向版本的水平视角&…