通过 scheduler 类来调度事件,从而达到定时执行任务的效果。使用标准库中sched模块非常简单。
它接受两个参数:timefunc和 delayfunc。timefunc 应该返回一个数字,代表当前时间;delayfunc 函数接受一个参数,用于暂停运行的时间单元。一般使用默认参数传入这两个参数 time.time 和 time.sleep.也可以自己实现时间暂停的函数。
scheduler 提供了两个添加调度任务的函数: enter(delay, priority, action, argument=(), kwargs={})
该函数可以延迟一定时间执行任务。delay 表示延迟多长时间执行任务,单位是秒。priority为优先级,越小优先级越大。
两个任务指定相同的延迟时间,优先级大的任务会向被执行。action 即需要执行的函数,argument 和 kwargs 分别是函数的位置和关键字参数。scheduler.enterabs(time, priority, action, argument=(), kwargs={})
添加一项任务,但这个任务会在 time 这时刻执行。因此time是绝对时间.其他参数用法与 enter() 中的参数用法是一致。
class Task:
# initialize schedule
def __init__(self):
self.xsched = sched.scheduler(time.time, time.sleep)
# add/enter task into scheduler # run task
def _start(self, tsk_fn, delay=1, priority=1):
self.xsched.enter(delay, priority, tsk_fn)
self.xsched.run()
用python编写。比urllib2模块更简洁。
Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。
在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。
现代,国际化,友好。
requests会自动实现持久连接keep-alive
# pip install requests
# https://github.com/requests/requests
# requests.request() 构造一个请求,支持以下各种方法
# requests.get() 获取html的主要方法 # GET: 请求指定的页面信息,并返回实体主体。
# requests.head() 获取html头部信息的主要方法 # HEAD: 只请求页面的首部。
# requests.post() 向html网页提交post请求的方法 # POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
# requests.put() 向html网页提交put请求的方法 # PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
# requests.patch() 向html提交局部修改的请求
# requests.delete() 向html提交删除请求 # DELETE: 请求服务器删除指定的页面。
# requests.options(“http://httpbin.org/get” ) # OPTIONS请求
# get 和 post比较常见 GET请求将提交的数据放置在HTTP请求协议头中
# POST提交的数据则放在实体数据中
r = requests.get('https://github.com/xiaogift') # 最基本的不带参数的get请求
# r1 = requests.get(url='http://dict.baidu.com/s', params={'wd': 'python'}) # 带参数的get请求
# r.encoding # 获取当前的编码
# r.encoding = 'utf-8' # 设置编码
# r.text # 以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
# r.content # 以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。
# r.headers # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
# r.status_code # 响应状态码
# r.raw # 返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()
# r.ok # 查看r.ok的布尔值便可以知道是否登陆成功
# r.json() # Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
# r.raise_for_status() # 失败请求(非200响应)抛出异常
# r.headers # 返回字典类型,头信息
# r.requests.headers # 返回发送到服务器的头信息
# r.cookies # 返回cookie
# r.history # 返回重定向信息,当然可以在请求是加上allow_redirects = false 阻止重定向
# 文件上传
files = {'file': open('cookie.txt', 'rb')}
response = requests.post("http://httpbin.org/post", files=files)
print(response.text)
# 代理
response = requests.get("https://www.taobao.com", proxies=proxies)
proxies = {'http':'ip1','https':'ip2' }
requests.get('url',proxies=proxies)
# 超时
r = requests.get('url',timeout=1) #设置秒数超时,仅对于连接有效
from requests.exceptions import ReadTimeout
try:
response = requests.get("http://httpbin.org/get", timeout = 0.5)
print(response.status_code)
except ReadTimeout:
print('Timeout')
# 认证
from requests.auth import HTTPBasicAuth
response = requests.get("http://120.27.34.24:9001/",auth=HTTPBasicAuth("user","123"))
print(response.status_code)
# 会话维持、模拟登陆
# 如果某个响应中包含一些Cookie,你可以快速访问它们:
r = requests.get('http://www.google.com.hk/')
print(r.cookies['NID'])
print(tuple(r.cookies))
# 要想发送你的cookies到服务器,可以使用 cookies 参数:
url = 'http://httpbin.org/cookies'
cookies = {'testCookies_1': 'Hello_Python3', 'testCookies_2': 'Hello_Requests'}
# 在Cookie Version 0中规定空格、方括号、圆括号、等于号、逗号、双引号、斜杠、问号、@,冒号,分号等特殊符号都不能作为Cookie的内容。
r = requests.get(url, cookies=cookies)
print(r.json()) # 需要先import json
# s = requests.Session()
# s.auth = ('auth','passwd')
# s.headers = {'key':'value'}
# r = s.get('url')
# r1 = s.get('url1')
# 定制头和cookie信息
header = {'user-agent': 'my-app/0.0.1'}
cookie = {'key':'value'}
r = requests.get/post('your url',headers=header,cookies=cookie)
data = {'some': 'data'}
headers = {'content-type': 'application/json',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
r = requests.post('https://api.github.com/some/endpoint', data=data, headers=headers)
print(r.text)
遇到网络问题(如:DNS查询失败、拒绝连接等)时,Requests会抛出一个ConnectionError 异常。
遇到罕见的无效HTTP响应时,Requests则会抛出一个 HTTPError 异常。
若请求超时,则抛出一个 Timeout 异常。
若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。
所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException 。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。