文章目录
cookiejar与dict转换
一般cookie在登录某个网页时会产生相关的cookie数据,这个cookie会有时间限制
cookie失效后,需要重新登录
requests.utils.dict_from_cookiejar 将cookiejar转化为dict
requests.utils.cookiejar_from_dict 将dict转为cookiejar
import requests
url='https://www.baidu.com/'
r=requests.get(url)
c=r.cookies
print(c)
d=requests.utils.dict_from_cookiejar(c)
print(d)
--------------------------------------------------------
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
{'BDORZ': '27315'}
请求SSL证书验证问题
verify=False 不验证SSL,默认为True,请求https网站需要改为False
response = requests.get('https://www.12306.cn/index/',verify=False)
解决因为ssl验证问题的告警信息:
import requests
requests.packages.urllib3.disable_warnings()
断言的使用
关键词:assert
assert response.status_code == 200
当assert后面的执行成功时,代码继续往下面走,如果不成功则抛出异常AssertionError
try:
assert code == False
print(code)
except AssertionError:
print(111111111)
URL地址的编解码
requests.utils.unquote() 解码
requests.utils.quote() 编码
当url中的中文出现类似乱码的情况,可以使用该方法
str='%E4%BD%A0%E5%A5%BD'
str1='你好'
print(requests.utils.unquote(str))
print(requests.utils.quote(str))
--------------------------------------------------
你好
%25E4%25BD%25A0%25E5%25A5%25BD
设置超时timeout与重试retrying
timeout:在requests请求时,加上timeout=3,连接超时3秒还没访问成功,就会报错了
retrying:其实就是在函数前面加个装饰器
@retry(stop_max_attempt_number = 3) #3是重试的次数
def fun():
pass
import requests
from retrying import retry
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}
@retry(stop_max_attempt_number = 3)
def _parse_url(url):
print('代码执行了几次?')
response = requests.get(url,headers=headers,timeout=3)
assert response.status_code == 200
return response.content.decode()
def parse_url(url):
try:
html_str = _parse_url(url)
except:
html_str = None
return html_str
if __name__ == '__main__':
url = 'http://www.baidu.com'
print(parse_url(url))
设置py文件的字符编码
# 查看当前文件的字符编码
import sys, requests
print(sys.stdout.encoding)
# 经常会碰到传递参数时,字符编码报错,可以加上这个试试
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
requests传参注意
# post传递form data:
requests.post(url,data=data)
# post传递Request Payload:
requests.post(url,data=json.dumps(data))
# get传递参数:
requests.get(url,params=data) #这里用的是params 需要注意
下载图片的方法
方法一:
import requests
url = 'https://www.baidu.com/img/bd_logo1.png?qua=high&where=super'
response = requests.get(url)
# print(response.content)
# b 字节 图片的内容
with open('baidu.png', 'wb') as f:
f.write(response.content)
方法二:
from urllib.request import urlretrieve
urlretrieve(url, path)
# url:下载的url地址
# path:下载后存放的路径