Python爬虫requests库教程(一)

1.requests 库简介Requests 是一个为人类设计的简单而优雅的 HTTP 库。requests 库是一个原生的 HTTP 库,比 urllib3 库更为容易使用。requests 库发送原生的 HTTP

1.requests 库简介

Requests 是一个为人类设计的简单而优雅的 HTTP 库。requests 库是一个原生的 HTTP 库,比 urllib3 库更为容易使用。requests 库发送原生的 HTTP 1.1 请求,无需手动为 URL 添加查询串, 也不需要对 POST 数据进行表单编码。相对于 urllib3 库, requests 库拥有完全自动化 Keep-alive 和 HTTP 连接池的功能。requests 库包含的特性如下。

❖ 1Keep-Alive & 连接池

❖ 国际化域名和 URL

❖ 带持久 Cookie 的会话

❖ 浏览器式的 SSL 认证

❖ 自动内容解码

❖ 基本 / 摘要式的身份认证

❖ 优雅的 key/value Cookie

❖ 自动解压

❖ Unicode 响应体

❖ HTTP(S) 代理支持

❖ 文件分块上传

❖ 流下载

❖ 连接超时

❖ 分块请求

❖ 支持 rc

1.1 Requests 的安装

pip install requests

1.2 Requests 基本使用

代码 1-1: 发送一个 get 请求并查看返回结果

import requests
url = 'http://www.tipdm/tipdm/index.html' # 生成get请求
rqg = requests.get(url)
# 查看结果类型
print('查看结果类型:', type(rqg))
# 查看状态码
print('状态码:',rqg.status_code)
# 查看编码
print('编码 :',rqg.encoding)
# 查看响应头
print('响应头:',rqg.headers)
# 打印查看网页内容
print('查看网页内容:',rqg.text)
查看结果类型:<class ’requests.models.Response’>
状态码:200
编码 :ISO-8859-1
响应头:{’Date’: ’Mon, 18 Nov 2019 04:45:49 GMT’, ’Server’: ’Apache-Coyote/1.1, ’
Accept-Ranges’:bytes, ’ETag’: ’W/"15693-1562553126764", ’Last-Modified’: ’
Mon, 08 Jul 2019 02:32:06 GMT’, ’Content-Type’: ’text/html’, ’Content-Length’:15693, ’Keep-Alive’: ’timeout=5, max=100, ’Connection’: ’Keep-Alive’}

1.3 Request 基本请求方式

你可以通过 requests 库发送所有的http请求:

requests.get("http://httpbin/get") #GET请求
requests.post("http://httpbin/post") #POST请求
requests.put("http://httpbin/put") #PUT请求
requests.delete("http://httpbin/delete") #DELETE请求
requests.head("http://httpbin/get") #HEAD请求
requests.options("http://httpbin/get") #OPTIONS请求

2.使用Request发送GET请求

HTTP中最常见的请求之一就是GET 请求,下面首先来详细了解一下利用requests构建GET请求的方法。

GET 参数说明:get(url, params=None, **kwargs):

❖ URL: 待请求的网址

❖ params :(可选)字典,列表为请求的查询字符串发送的元组或字节

❖ kwargs: 可变长关键字参数

首先,构建一个最简单的 GET 请求,请求的链接为 http://httpbin/get ,该网站会判断如果客户端发起的是 GET 请求的话,它返回相应的请求信息,如下就是利用 requests构建一个GET请求

import requests
r = requests.get(http://httpbin.org/get)
print(r.text)
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin",
"User-Agent": "python-requests/2.24.0",
"X-Amzn-Trace-Id": "Root=1-5fb5b166-571d31047bda880d1ec6c311"
},
"origin": "36.44.144.134",
"url": "http://httpbin/get"
}

可以发现,我们成功发起了 GET 请求,返回结果中包含请求头、URL 、IP 等信息。那么,对于 GET 请求,如果要附加额外的信息,一般怎样添加呢?

2.1 发送带 headers 的请求

首先我们尝试请求知乎的首页信息

import requests
response = requests.get(’https://www.zhihu.com/explore’)
print(f"当前请求的响应状态码为:{response.status_code}")
print(response.text)

当前请求的响应状态码为:400

400 Bad Request


openresty

这里发现响应的状态码为 400 ,说明我们请求失败了,因为知乎已经发现了我们是一个爬虫,因此需要对浏览器进行伪装,添加对应的 UA 信息。

import requests
headers = {"user-agent": ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36}
response = requests.get(’https://www.zhihu.com/explore’, headers=headers)
print(f"当前请求的响应状态码为:{response.status_code}")
# print(response.text)

当前请求的响应状态码为:200

<!doctype html>

这里我们加入了 headers 信息,其中包含了 User-Agent 字段信息,也就是浏览器标识信息。很明显我们伪装成功了!这种伪装浏览器的方法是最简单的反反爬措施之一。

GET 参数说明:携带请求头发送请求的方法

requests.get(url, headers=headers)

-headers 参数接收字典形式的请求头

-请求头字段名作为 key ,字段对应的值作为 value

练习

请求百度的首页 https://www.baidu , 要求携带 headers, 并打印请求的头信息 !

import requests
url = 'https://www.baidu'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
# 在请求头中带上User-Agent,模拟浏览器发送请求
response = requests.get(url, headers=headers)
print(response.content)
# 打印请求头信息
print(response.request.headers)

** **

2.2 发送带参数的请求

我们在使用百度搜索的时候经常发现 url 地址中会有一个 ‘?‘ ,那么该问号后边的就是请求参数,又叫做查询字符串!

通常情况下我们不会只访问基础网页,特别是爬取动态网页时我们需要传递不同的参数获取 不同的内容;GET 传递参数有两种方法,可以直接在链接中添加参数或者利用 params 添加参数。

2.2.1 在 url 携带参数

直接对含有参数的url发起请求

import requests
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
url = ’https://www.baidu.com/s?wd=python’
response = requests.get(url, headers=headers)

2.2.2 通过 params 携带参数字典

1.构建请求参数字典

2.向接口发送请求的时候带上参数字典,参数字典设置给 params

import requests
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
# 这是目标url
# url = ’https://www.baidu/s?wd=python’
# 最后有没有问号结果都一样
url = ’https://www.baidu.com/s?’
# 请求参数是一个字典 即wd=python
kw = {’wd’: ’python’}
# 带上请求参数发起请求,获取响应
response = requests.get(url, headers=headers, params=kw)
print(response.content)

通过运行结果可以判断,请求的链接自动被构造成了:

http://httpbin/get?key2=value2&key1=value1 。

另外,网页的返回类型实际上是str类型,但是它很特殊,是 JSON格式的。所以,如果想直接解析返回结果,得到一个字典格式的话,可以直接调用json() 方法。示例如下:

import requests
r = requests.get("http://httpbin/get")
print( type(r.text))
print(r.json())
print( type(r. json()))

< class ’str’ >

{ ’args’ : {}, ’headers’ : { ’Accept’ : ’/’ , ’Accept-Encoding’ : ’gzip, deflate’ , ’Host’’httpbin’ , ’User-Agent’ : ’python-requests/2.24.0’ , ’X-Amzn-Trace-Id’ : ’Root=1-5fb5b3f9-13f7c2192936ec541bf97841’ }, ’origin’ : ’36.44.144.134’ , ’url’ : ’http://httpbin/get’ }

< class ’dict’ >

可以发现,调用 json() 方法,就可以将返回结果是JSON格式的字符串转化为字典。但需要注意的是,如果返回结果不是 JSON 格式,便会出现解析错误,抛出 json.decoder.JSONDecodeError异常。

补充内容,接收字典字符串都会被自动编码发送到 url ,如下:

import requests
headers = {’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36’}
wd = ’张三同学’
pn = 1
response = requests.get(’https://www.baidu/s’, params={’wd’: wd, ’pn’: pn},
headers=headers)
print(response.url)

# 输出为:https://www.baidu/s?wd=%E9%9B%A8%E9%9C%93%E5%90%8

C%E5%AD%A6&pn=1

# 可见 url 已被自动编码

上面代码相当于如下代码,params编码转换本质上是用urlencode

import requests
from urllib.parse import urlencode
headers = {’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko)
wd = ’张三同学’
encode_res = urlencode({’k’: wd}, encoding=’utf-8)
keyword = encode_res.split(=)[1]
print(keyword)
# 然后拼接成url
url = ’https://www.baidu.com/s?wd=%s&pn=1% keyword
response = requests.get(url, headers=headers)
print(response.url)

# 输出为:https://www.baidu/s?wd=%E9%9B%A8%E9%9C%93%E5

%90%8C%E5%AD%A6&pn=1

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

发布者:admin,转转请注明出处:http://www.yc00.com/web/1754594491a5179521.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信