Python3 爬虫学习笔记 C02 【基本库 requests 的使用】


Python3 爬虫学习笔记第二章 —— 【基本库 requests 的使用】

文章目录

  • 【2.1】 requests 简介
  • 【2.2】 requests 基本用法
  • 【2.3】 requests 构建 GET 请求
    • 【2.3.1】 基本用法
    • 【2.3.2】 二进制数据抓取
    • 【2.3.3】 添加 headers
  • 【2.4】 requests 构建 POST 请求
  • 【2.5】 requests 高级用法
    • 【2.5.1】 上传文件
    • 【2.5.2】 使用 Cookies
    • 【2.5.3】 会话维持
    • 【2.5.4】 SSL 证书验证
    • 【2.5.5】 设置代理
    • 【2.5.6】 超时设置


【2.1】 requests 简介

在 Python 中有两种方式可以发送 HTTP 请求,分别是自带的 urllib 库和第三方的 requests 库

requests 模块需要使用 pip install 命令安装安装,相比 urllib,它的 API 更加人性化,使用requests 可以让 Cookies、登录验证、代理设置等操作更加简便,官网介绍:http://cn.python-requests.org

【2.2】 requests 基本用法

示例:

import requests
r = requests.get('https://www.itrhx.com/')
print(type(r))
print(r.encoding)
print(r.status_code)
print(r.cookies)
print(r.json)
print(r.text)
print(r.content)

输出结果:

<class 'requests.models.Response'>
utf-8
200
<RequestsCookieJar[]>
<bound method Response.json of <Response [200]>>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8">......
  • r.encoding:服务器内容使用的文本编码;
  • r.status_code:响应状态码,200 代表成功,4xx 代表客户端错误,5xx 服务器响应错误;
  • r.cookies:返回 Cookies;
  • r.json:Requests 内置 JSON 解码器;
  • r.text:服务器响应内容,根据响应头部的字符编码自动解码;
  • r.content:字节方式的响应体,自动解码 gzip 和 deflate 编码的响应。

【2.3】 requests 构建 GET 请求

【2.3.1】 基本用法

示例:

import requestsdata = {'name': 'TRHX','age': '20'
}
r = requests.get("http://httpbin.org/get", params=data)
print('编码后的URL:', r.url)
print('字符串方式的响应体:', r.text)

输出结果:

编码后的URL: http://httpbin.org/get?name=TRHX&age=20
字符串方式的响应体: {"args": {"age": "20", "name": "TRHX"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0"}, "origin": "171.115.102.230, 171.115.102.230", "url": "https://httpbin.org/get?name=TRHX&age=20"
}

【2.3.2】 二进制数据抓取

以抓取 GitHub 站点图标为例:

import requestsr = requests.get("https://github.com/favicon.ico")
with open('favicon.ico', 'wb') as f:f.write(r.content)

该代码将会保存站点图标到本地,其他的,比如音频,视频文件都是由二进制码组成的,皆可使用该方法

【2.3.3】 添加 headers

headers 的作用:部分页面禁止 Python 爬虫对其进行爬取,而添加 headers 就可以模拟成浏览器取访问网站,实现数据的爬取,headers 可以在任意网页 F12 检查控制台里面找到,headers 最重要的是 “User-Agent” 字段
01
以为例知乎,只有加了 headers 才能正常爬取,否则会返回 400 Bad Request 没有任何数据

import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
r = requests.get("https://www.zhihu.com/explore", headers=headers)
print(r.text)

【2.4】 requests 构建 POST 请求

示例:

import requestsdata = {'name': 'TRHX', 'age': '20'}
r = requests.post("http://httpbin.org/post", data=data)
print(r.text)

输出结果:

{"args": {}, "data": "", "files": {}, "form": {"age": "22", "name": "germey"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "18", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0"}, "json": null, "origin": "171.115.102.230, 171.115.102.230", "url": "https://httpbin.org/post"
}

有关 POST 和 GET 两种请求的一些区别:

  • POST 更加安全,不会作为 URL 的一部分,不会被缓存,保存在服务器日志、以及浏览器浏览记录中;
  • POST 发送的数据更大,GET 有 URL 长度限制;
  • POST 可以发送更多的数据类型,GET 只能发送 ASCII 字符;
  • POST 比 GET 慢;
  • POST 查询参数在 WebForms 保存,GET 查询参数在 QueryString 保存;
  • POST 用数据的修改和写入,GET 一般用于搜索排序和筛选之类的操作。

【2.5】 requests 高级用法

【2.5.1】 上传文件

示例:

import requestsfiles = {'file': open('test.png', 'rb')}
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)

输出结果:

{"args": {}, "data": "", "files": {"file": "data:application/octet-stream;base64,iVBOR......"}, "form": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "81383", "Content-Type": "multipart/form-data; boundary=e36a8686cd77c79dc02bfe9d1b010f08", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0"}, "json": null, "origin": "171.115.102.230, 171.115.102.230", "url": "https://httpbin.org/post"
}

【2.5.2】 使用 Cookies

对于需要登录后才能获取数据的网页,可以将账号登录的 Cookies 添加到 headers 来实现网页登录爬取,Cookies 可以抓包获取,代码示例:

import requestsheaders = {'Cookie': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','Host': 'www.zhihu.com','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
}
r = requests.get('https://www.zhihu.com', headers=headers)
print(r.text)

【2.5.3】 会话维持

  • 背景介绍:利用 get() 或者 post() 方法来模拟网页请求,相当于是不同的会话,可以理解为用两个浏览器打开了不同的网页;

  • 运用场景:首先使用 post() 方法登录网页,然后再使用 get() 方法请求某个页面信息,如果不利用会话维持,将无法获取页面数据

  • 维持方法:①两次请求设置一样的 cookies,缺点:繁琐;②使用 Session 对象。

Session 对象使用示例:

import requestss = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)

输出结果成功获取到设置的 cookies:

{"cookies": {"number": "123456789"}
}

【2.5.4】 SSL 证书验证

SSL 证书是数字证书的一种,由受信任的数字证书颁发机构 CA 在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能,网站带有 HTTPS 就表明有 SSL 证书

requests 提供了证书验证的功能。当发送 HTTP 请求的时候,它会检查 SSL 证书,verify 参数可以控制是否检查此证书。如果不加 verify 参数,默认为 True,会自动验证。当一个页面的 SSL 证书没有被官方机构认证时,打开页面就会提示“您的连接不是私密连接”,如果没有设置 verify 参数,将会报以下错误:

requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)

设置 verify 参数代码示例:

import requestsresponse = requests.get('https://www.itrhx.com', verify=False)
print(response.text)

【2.5.5】 设置代理

为什么要设置代理:某些网页有反爬虫机制,频繁请求网页就会出现验证码等,还有可能直接封掉 IP,导致爬取失败;这种情况下就可以设置 proxies 参数。
示例:

import requestsproxies = {'http': 'http://10.10.1.10:1010','https': 'http://10.10.1.10:1020',
}requests.get('https://www.itrhx.com', proxies=proxies)

免费代理可在西刺代理找到

【2.5.6】 超时设置

与 urllib.request.urlopen() 类似,requests 也可以设置 timeout 参数,请求分为两个阶段:连接和读取

设置连接和读取时间总和:

import requestsr = requests.get('https://www.itrhx.com', timeout=1)
print(r.status_code)

分别设置连接和读取时间:

import requestsr = requests.get('https://www.itrhx.com', timeout=(5, 10))
print(r.status_code)

永久等待:

import requests# 两种方法实现
# r = requests.get('https://www.itrhx.com')
r = requests.get('https://www.itrhx.com', timeout=None)
print(r.status_code)

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

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

相关文章

REVERSE-COMPETITION-HGAME2022-Week4

REVERSE-COMPETITION-HGAME2022-Week4( WOW )serverezvmhardasm( WOW ) 32位exe&#xff0c;ida打开 观察伪代码逻辑&#xff0c;上面的红框中&#xff0c;输入经过加密&#xff0c;密文放入Buf2中&#xff0c;然后Buf2和已知的密文res比较 比较完&#xff0c;打印"win&q…

Python3 爬虫学习笔记 C03 【Ajax 数据爬取】

Python3 爬虫学习笔记第三章 —— 【Ajax 数据爬取】文章目录【3.1】Ajax 简介 【3.2】解析真实地址提取【3.1】Ajax 简介 Ajax — Asynchronous Javascript And XML&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c;是指一种创建交互式网页应用的网页开发技术。可…

REVERSE-COMPETITION-HWS-5TH-2022

REVERSE-COMPETITION-HWS-5TH-2022re1re2re3re1 64位exe&#xff0c;ida打开&#xff0c;来到main函数 输入的长度应为32&#xff0c;输入经过TEA加密&#xff0c;密文与已知的cipher进行比较 进入TEA函数&#xff0c;发现是魔改TEA&#xff0c;需一次性传入8个unsigned int&…

REVERSE-COMPETITION-DSCTF-2022

REVERSE-COMPETITION-DSCTF-2022catchmeFFunctionnothingbad_applefantastic_cpucatchme 安卓逆向&#xff0c;java层传递输入&#xff0c;调用native层的check方法 ida打开.so文件&#xff0c;没有直接找到check方法&#xff0c;JNI_OnLoad也看不出什么 Findcrypt查到AES的S盒…

01-单一职责原则(SPR)

1. 背景 类T负责两个不同的职责&#xff1a;职责P1&#xff0c;职责P2。当由于职责P1需求发生改变而需要修改类T时&#xff0c;有可能会导致原本运行正常的职责P2功能发生故障。 2. 定义 不要存在多于一个导致类变更的原因。通俗的说&#xff0c;即一个类只负责一项职责。 3.…

Python3 已经安装相关库,Pycharm 仍然报错 ModuleNotFoundError: No module named 'xxxxxx' 的解决办法

以 requests 库为例&#xff0c;打开 cmd&#xff0c;运行命令 pip install requests&#xff0c;即可安装 requests 库&#xff0c;由于我已经安装过&#xff0c;所以会提示 Requirement already satisfied 此时&#xff0c;我们使用 Pycharm 运行以下代码&#xff1a; impo…

Sharepoint学习笔记—Site Definition系列-- 3、创建ListDefinition

创建一个List Definition有多条途径&#xff0c;这里由于我们要基于前面的用户自定义Content Type来创建一个List Defintion&#xff0c;所以我们就需要使用到List Definition From Content Type模板。 这里先大致描述如何创建List Definition&#xff0c;然后重点介绍一下Li…

Sharepoint学习笔记—error处理-- The user does not exist or is not unique.

看到网上不少人遇到过这种类似的错误&#xff0c;而产生这种错误的原因也有多种&#xff0c;我产生此错误的背景是在试图通过ECMAscript对象模型把一个User添加到某个指定的Group中时遇到的。 问题1.当我试图把一个User添加到Sharepoint的某个指定的Group&#xff0c;…

Knockout学习笔记之二($root,$parent及$data的区别)

以下是我从Google上找到的一个例子&#xff0c;非常生动形象&#xff0c;我修改了部分代码&#xff0c;具体内容如下&#xff1a; 对于$root 与$parent的区别&#xff1a; $root refers to the view model applied to the DOM with ko.applyBindings;译&#xff1a;$root 是指…

GitHub 学生认证,申请 GitHub 学生包

GitHub 面对学生推出了学生认证服务&#xff0c;通过认证后就可以得到学生包&#xff0c;学生包大概有十几项优惠&#xff0c;包括 DATADOG Pro 帐户、免费两年的10台服务器&#xff0c;Icons8 3个月的带图标&#xff0c;照片&#xff0c;插图和音乐订阅服务、JETBRAINS 专业桌…

Python3 使用 pymysql 连接 MySQL 建表时出现 Warning3719 UTF8 警告

在学习 Python3 爬虫关系型数据库储存时&#xff0c;利用 pymysql 连接 MySQL 建表&#xff0c;测试用的代码如下&#xff0c;第一句 SQL 用于获取当前 MySQL 的版本信息&#xff0c;第二句 SQL 执行创建 spiders 数据库的操作&#xff0c;如果程序代码正确&#xff0c;将会输出…

完美解决 bash: hexo: command not found

背景介绍&#xff1a;有好几天没动过 Hexo 博客了&#xff0c;今天准备更新的时候输入 hexo s&#xff0c;报错 bash: hexo: command not found&#xff0c;这是啥情况&#xff1f;以前都好好的&#xff0c;想了一下&#xff0c;大概是这几天折腾各种 Python 库的原因&#xff…

Sharepoin学习笔记 —架构系列--02 Sharepoint的处理(Process)与执行模型(Trust Model) 1

Sharepoint210有四种执行模型: 1、完全信任执行模型(Full Trust) 2、Bin/CAS 执行模型 &#xff08;1与2都属于场解决方案&#xff09; 3、沙盒执行模型(Sand Box) 4、 混合执行方法&#xff08;Hybrid Approach&#xff09; Sharepoint最简单的处理模型就是一个完整的Asp.net应…

Python3 爬虫学习笔记 C10【数据储存系列 — MySQL】

Python3 爬虫学习笔记第十章 —— 【数据储存系列 — MySQL】文章目录【10.1】MySQL 基本操作语句数据库操作表操作表的结构表的数据【10.2】Python 连接 MySQL【10.3】创建表【10.4】插入数据【10.5】更新数据【10.6】删除数据【10.7】查询数据【10.8】实战训练 — 爬取CSDN博…

Sharepoin学习笔记—架构系列--03 Sharepoint的处理(Process)与执行模型(Trust Model) 2

上文我们了解了一个外部Http Request进入IIS 工作进程(W3WP)的处理与执行信任模型&#xff0c;这个阶段是Sharepoint的四种执行模型都必须经过的处理阶段&#xff0c;其中Sharepoint场解决方案与任何 ASP.NET 应用程序一样就是在 IIS 工作进程(w3wp)中运行的&#xff0c;所以上…

Python3 爬虫学习笔记 C11【数据储存系列 — MongoDB】

Python3 爬虫学习笔记第十一章 —— 【数据储存系列 — MongoDB】文章目录【11.1】关于 MongoDB【11.2】MongoDB 基本操作语句【11.3】连接 MongoDB【11.4】指定数据库【11.5】指定集合【11.6】插入数据【11.6】数据查询【11.7】数据计数【11.8】数据排序【11.9】数据偏移【11.…

Sharepoin学习笔记—架构系列--04 Sharepoint的四种执行模型 1

Sharepoint210有四种执行模型 1、完全信任执行模型(Full Trust) 2、Bin/CAS 执行模型 &#xff08;1与2都属于场解决方案&#xff09; 3、沙盒执行模型(Sand Box) 4、 混合执行方法 (Hybrid Approach) 下面分别来看看它们是怎么回事 一、场解决方案 场解决方案是在 Share…

Python3 爬虫学习笔记 C12【验证码对抗系列 — 图形验证码】

Python3 爬虫学习笔记第十二章 —— 【验证码对抗系列 — 图形验证码】文章目录【12.1】关于普通图形验证码【12.2】tesserocr 库识别验证码【12.3】pytesseract 库识别验证码【12.4】验证码处理【12.5】tesserocr 与 pytesserocr 相关资料【12.1】关于普通图形验证码 普通图形…

Sharepoin学习笔记—架构系列--05 Sharepoint的四种执行模型 2

上一篇我们看了场解决方案与沙盒方案两种执行模型&#xff0c;其中场解决方案包括有完全信任方式与Bin/CAS方式两种&#xff0c;这里让我们继续来看看最后一个执行模型&#xff0c;即混合模型(或混合模式)。 三、混合模式&#xff08;hybrid approaches&#xff09; 所谓混合模…

Python3 爬虫学习笔记 C13【验证码对抗系列 — 滑动验证码】

Python3 爬虫学习笔记第十三章 —— 【验证码对抗系列 — 滑动验证码】文章目录【13.1】关于滑动验证码【13.2】滑动验证码攻克思路【13.3】模拟登录 bilibili — 总体思路【13.4】主函数【13.5】初始化函数【13.6】登录函数【13.7】验证码元素查找函数【13.8】元素可见性设置函…