用照片做模板下载网站,成都网站建设公司 四川冠辰科技,黑帽seo是什么意思,搬家公司怎么做网站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】 request… 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
headmeta charsetutf-8......r.encoding服务器内容使用的文本编码r.status_code响应状态码200 代表成功4xx 代表客户端错误5xx 服务器响应错误r.cookies返回 Cookiesr.jsonRequests 内置 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, paramsdata)
print(编码后的URL, r.url)
print(字符串方式的响应体, r.text)输出结果
编码后的URL http://httpbin.org/get?nameTRHXage20
字符串方式的响应体 {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?nameTRHXage20
}【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” 字段 以为例知乎只有加了 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, headersheaders)
print(r.text)【2.4】 requests 构建 POST 请求
示例
import requestsdata {name: TRHX, age: 20}
r requests.post(http://httpbin.org/post, datadata)
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, filesfiles)
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; boundarye36a8686cd77c79dc02bfe9d1b010f08, 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, headersheaders)
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, verifyFalse)
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, proxiesproxies)免费代理可在西刺代理找到 【2.5.6】 超时设置
与 urllib.request.urlopen() 类似requests 也可以设置 timeout 参数请求分为两个阶段连接和读取
设置连接和读取时间总和
import requestsr requests.get(https://www.itrhx.com, timeout1)
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, timeoutNone)
print(r.status_code)