全网最全!Python爬虫requests库教程(附案例)_python requests(2)

requests.delete(“http://httpbin.org/delete”) #DELETE请求
requests.head(“http://httpbin.org/get”) #HEAD请求
requests.options(“http://httpbin.org/get”) #OPTIONS请求


## 2.使用Request发送GET请求


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


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


❖ URL: 待请求的网址


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


❖ \*\*kwargs: 可变长关键字参数


首先,构建一个最简单的 GET 请求,请求的链接为 http://httpbin.org/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.org”,
“User-Agent”: “python-requests/2.24.0”,
“X-Amzn-Trace-Id”: “Root=1-5fb5b166-571d31047bda880d1ec6c311”
},
“origin”: “36.44.144.134”,
“url”: “http://httpbin.org/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.com , 要求携带 headers, 并打印请求的头信息 !


**解**



import requests
url = ‘https://www.baidu.com’
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.com/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.org/get?key2=value2&key1=value1 。


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



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


< class ’str’ >


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


< class ’dict’ >


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


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



import requests
headers =

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值