Python3爬虫;requests请求库的使用

使用requests 请求库, 我们可以更方便并且更简单的完成发送请求,获取响应等业务。

下载:

pip install requests

使用requests库可以轻易的向服务器发送各种请求方式并获取响应, 下面来让我们了解一下requests 请求库的强大之处

GET 请求:

import requests

r = requests.get('https://www.httpbin.org/get')
print(r.text)

在requests 库中, 如果想要发送一个get请求是很简单的, 直接调用get方法,将URL 传入其中, 返回的同样是一个 Response 的相应对象, 当我们获取这个响应对象

params 参数:

如果想在URL 中携带查询参数 则需要使用到params 参数, 只需要构造一个参数字典, 然后使用params 参数接受这个字典即可

import requests  

data = {  
    'name': 'germey',  
    'age': 25
}  
r = requests.get('https://httpbin.org/get', params=data)  
print(r.text)

此外, 由于这个URL地址返回的响应调用 text 属性后返回的是一个字符串, 其实是一个JSON数据, 我们可以调用 json() 方法, 将其转为字典对象, 方便后续处理, 这里需要注意的是, 返回的响应体必须是json 数据才可以调用json() 方法进行转换, 否则会抛出异常

import requests  

data = {  
    'name': 'germey',  
    'age': 25
}  
r = requests.get('https://httpbin.org/get', params=data)  
# print(r.text)

# <class 'str'>
print(type(r.text))

# <class 'dict'>
print(type(r.json()))

添加请求头:

还有一个更为重要的请求头参数 headers  使用这个参数, 可以做一些基本的 ua 伪装

import requests

url = 'https://www.baidu.com'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0'
}

response = requests.get(url, headers=headers)
print(response.text)

POST 请求:

使用requests 发送一个post请求同样很简单

import requests

data = {'name': 'germey', 'age': '25'}
r = requests.post("https://www.httpbin.org/post", data=data)
print(r.text)

将请求体参数定义在一个字典中, 然后调用post方法, 将字典传递给 data参数即可完成一个post请求。

响应:

当我们发送请求获取响应后, 其请求返回的是一个Response 对象, 既然是一个对象,那么就可以调用它的方法及属性了。

import requests

r = requests.get('https://ssr1.scrape.center/')
print(type(r.status_code), r.status_code)
print(type(r.headers), r.headers)
print(type(r.cookies), r.cookies)
print(type(r.url), r.url)
print(type(r.history), r.history)

高级用法:

前面介绍了基本的请求, 例如,get,post,等, 解下来让我们了解一下如何使用requests 操作文件上传, Cookie设置, 代理设置等

文件上传:

使用files参数, 可以完成文件上传的功能, 其接收的也是一个字典对象,

import requests

files = {'file': open('favicon.ico', 'rb')}
r = requests.post('https://www.httpbin.org/post', files=files)
print(r.text)

Cookie 设置:

我们可以将cookie放在请求头中, 然后通过headers参数传递, 同样也可以通过 cookies 参数来操作, 但是需要构建一个cookiejar 对象, 才能传递给cookies 参数


cookies = '_octo=GH1.1.1849343058.1576602081; _ga=GA1.2.90460451.1576602111; __Host-user_session_same_site=nbDv62kHNjp4N5KyQNYZ208waeqsmNgxFnFC88rnV7gTYQw_; _device_id=a7ca73be0e8f1a81d1e2ebb5349f9075; user_session=nbDv62kHNjp4N5KyQNYZ208waeqsmNgxFnFC88rnV7gTYQw_; logged_in=yes; dotcom_user=Germey; tz=Asia%2FShanghai; has_recent_activity=1; _gat=1; _gh_sess=your_session_info'
jar = requests.cookies.RequestsCookieJar()
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36'
}
for cookie in cookies.split(';'):
    key, value = cookie.split('=', 1)
    jar.set(key, value)
r = requests.get('https://github.com/', cookies=jar, headers=headers)
print(r.text)

Session 状态保持:

使用session对象, 可以更方便的为我们自动管理cookie等信息,实现状态保持

import requests

session = requests.Session()


response = session.get('https://www.baidu.com')

忽略证书警告:

import requests
from requests.packages import urllib3

urllib3.disable_warnings()
response = requests.get('https://ssr2.scrape.center/', verify=False)
print(response.status_code)



import logging
import requests

logging.captureWarnings(True)
response = requests.get('https://ssr2.scrape.center/', verify=False)
print(response.status_code)

身份认证:

# 第一种方式
import requests
from requests.auth import HTTPBasicAuth

r = requests.get('https://ssr3.scrape.center/', auth=HTTPBasicAuth('admin', 'admin'))
print(r.status_code)



# 第二种方式
import requests

r = requests.get('https://ssr3.scrape.center/', auth=('admin', 'admin'))
print(r.status_code)

此外, requests库还提供了其它的认证方式, 如 OAuth 认证, 不过需要额外下载扩展包

pip install requests_oauthlib
import requests
from requests_oauthlib import OAuth1

url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
auth = OAuth1('YOUR_APP_KEY', 'YOUR_APP_SECRET',
              'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
requests.get(url, auth=auth)

代理设置:

在requests库中, 设置代理只需要使用 proxies 参数即可

import requests

proxies = {
  'http': 'http://10.10.10.10:1080',
  'https': 'http://10.10.10.10:1080',
}
requests.get('https://httpbin.org/get', proxies=proxies)


proxies = {'https': 'http://user:password@10.10.10.10:1080/',}
requests.get('https://httpbin.org/get', proxies=proxies)

如果设置的代理是 socks 协议代理, 则需要额外安装

pip install requests[socks]
import requests

proxies = {
    'http': 'socks5://user:password@host:port',
    'https': 'socks5://user:password@host:port'
}
requests.get('https://httpbin.org/get', proxies=proxies)

完.... 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_文书先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值