Python 应用场景非常广泛,大数据、爬虫、人工智能等,常见的热门领域都离不开这个家伙,今天又来说说 Python 常用的库之一「Requests」,只要是与网络相关的的操作,都离不开这个库。RESTful 常见的增删改查「CRUD」都用这个可以实现。
基础的操作有,请求一个页面,获取「get」网页内容。
>>> r = requests.get('https://google.cn') # get
>>> r
<Response [200]> # HTTP 响应200
>>> r.headers['content-type'] # 网页类型
'text/html'
>>> r.encoding # 正在使用的编码
'ISO-8859-1
#基础用法
上面这个是最简单的,不需要上面认证、服务器认证代理、请求内容、定制头等,比如带上请求数据,把需要的数据封装为字典,然后用 params 带入即可。
# 在浏览器访问的网址是
# https://google.cn/get?key2=value2&key1=value1
# 用 Requests 来访问
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://google.cn/get', params=payload)
对返回的内容还可以解析,有一个内置的 JSON 解码器,不过是针对一个返回的是一个字典,如果是多个字典的话,有报错异常提示。
>>> import requests
>>> r = requests.get('https://google.cn/events')
>>> r.json()
[{u'repository': {u'open_issues': 0, u'url': 'https://google.cn/...
如果JSON解码失败,则 r.json() 引发异常。例如,如果响应获得 204(无内容),或者响应包含无效的 JSON ,则尝试 r.json() 引发。
ValueError: No JSON object could be decoded
自定义 header 内容
>>> headers = {'user-agent': 'my-app/0.0.1'}
>>> r = requests.get(url, headers=headers)
对于 POST 的请求,则需要带上 data
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("https://google.cn/post", data=payload)
在爬取数据的时候,有时候会遇到网站是用 cookies 来访问的,这个时候需要认证,获取到 cookies,然后带上参数 cookies 即可访问。
>>> url = 'https://google.cn/cookies'
>>> cookies = dict(cookies_are='working')
>>> r = requests.get(url, cookies=cookies)
还有一些网站反「爬」机制的,会加上多个路径的 cookies,就可以用到
>>> jar = requests.cookies.RequestsCookieJar()
>>> jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
>>> jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
>>> url = 'https://google.cn/cookies'
>>> r = requests.get(url, cookies=jar)
应当指出的是,呼叫的成功 r.json() 并不能 表明响应成功。某些服务器可能会在失败的响应中返回 JSON 对象(例如,HTTP 500的错误详细信息)。这样的JSON将被解码并返回。要检查请求是否成功,请使用 r.raise_for_status() 或检查r.status_code 您的期望。
Requests 一个强大的网络应用库,在了解了上面的知识后,可以用来爬爬数据,比如豆瓣、知乎、以及公众号的数据,行动起来吧,网上也有很多类似的教程,可以跟着多动手,实战一番。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。