requests模块
#各种请求方式:常用的就是requests.get()和requests.post() >>> import requests >>> r = requests.get('https://api.github.com/events')请求页面,并返回页面内容 >>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})大多用于提交表单或上传文件,数据包含在请求体中 >>> r = requests.put('http://httpbin.org/put', data = {'key':'value'})从客户端向服务器传送的数据取代指定文梢中的内容 >>> r = requests.delete('http://httpbin.org/delete')请求服务器删除指定的页面 >>> r = requests.head('http://httpbin.org/get')类似于GET 请求, 只不过返回的响应中没有具体的内容,用于获取报头 >>> r = requests.options('http://httpbin.org/get')允许客户端查看服务器的性能 >>> r = requests.connect('http://httpbin.org/get') 把服务器当作跳板,让服务器代替客户端防问其他网页 >>> r = requests.trace('http://httpbin.org/get')囚显服务器收到的请求,主要用于测试或诊断 (1)Content-Type 和POST 提交数据方式的关系: application /x-www-forrn-urlencoded 表单数据 multi part/form-data 表单文件上传 application/json 序列化JSON 数据 text/xml XML 数据 handers一般网站采用下列7个作为请求头 { Host Connection Accept User-Agent Referrer Accept-Econding Accept-Language } headers: from fake_useragent import UserAgent ue = UserAgent() headers = {'User-Agent':ue.random} data: requests.post(url, data = data) 解析json: res = requests.get("http://httpbin.org") res.json() # 返回json格式字符串 获取属性内容: res.text # 获取为html,str类型 res.content # 获取为html,二进制类型 res.status_code # 获取状态码,int res.headers # 获取头信息,dict res.cookies # 获取cookie,dict res.url # 获取连接,str res.history # 获取历史记录,list cookie模拟登陆验证: 自动跟踪会话对象 session = requests.Session() 1、可以持续跟踪cookie,headers 2、跟踪运行的HTTP协议信息 3、 res = session.post() 与 res = requests.post()参数一致 res = session.get() 与 res = requests.get()参数一致 例子: --------------------------------------------使用session import requests session = requests.Seesion() params = {'username':'username','password':'password'} res1 = session.post(url_php,params) res2 = session.get(url_file) # res2 的 cookie 与 res1 相同 ------------------------------------------不使用session import requests params = {'username':'username','password':'password'} r = requests.post('url_php',params) print(r.cookies.get_dict()) cookies = r.cookies r = requests.get('url_file',cookies) print(r.text) # 每一次保持cookie打开连接,都需要添加cookie HTTP登录认证: (1) import requests from requests.auth import HTTPBasicAuth #生成HTTPBasicAuth对象,参数为cookie auth = HTTPBasicAuth('ryrl','password') r = requests.post('http://pythonscraping.com/pages/auth/login.php',auth = auth) print(r.text) (2) import requests r = requests.post('http://pythonscraping.com/pages/auth/login.php',auth = ('user','password')) SSL证书: (i)设置verify=False,忽略ssl验证。已经忽略ssl警告 import requests from requests.packages import urllib3 urllib3.disable_warnings() res = requests.get('http://www.12306.cn',verify = False) res.status_code (ii)设置证书路径 import requests res = requests.get('http://www.12306.cn',cert = ('/path/server.crt','/path/key')) print(res.status_code) 代理IP: (1)常规 >>> import requests >>> proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080", } >>> requests.get("http://example.org", proxies=proxies) 你也可以通过环境变量 HTTP_PROXY 和 HTTPS_PROXY 来配置代理。 $ export HTTP_PROXY="http://10.10.1.10:3128" $ export HTTPS_PROXY="http://10.10.1.10:1080" $ python >>> import requests >>> requests.get("http://example.org") 若你的代理需要使用HTTP Basic Auth,可以使用 http://user:password@host/ 语法: >>> proxies = { "http": "http://user:pass@10.10.1.10:3128/", } 要为某个特定的连接方式或者主机设置代理,使用 scheme://hostname 作为 key, 它会针对指定的主机和连接方式进行匹配。 >>> proxies = {'http://10.20.1.128': 'http://10.10.1.10:5323'} 注意,代理 URL 必须包含连接方式。 (2)需要密码登陆: >>> import requests >>> user = 'loli' >>> passwrod = '123456' >>> ip_user = "http://"+user+":"+passwrod+"@10.10.1.10:3128" # 拼接后"http://loli:123456@10.10.1.10:3128" >>> proxies = { "http": ip_user,} >>> requests.get("http://example.org", proxies=proxies) (3)使用socks代理 >>> import requests >>> proxies = { "http": "sock5://user:passwrod@10.10.1.10:3128", "https": "sock5://user:passwrod@10.10.1.10:1080", } >>> res = requests.get("http://www.taobao.com",proxies=proxies) 异常超时设置: ReadTimeout类 from requests.exceptions import ReadTimeout,ConnectionError,RequestException try: ... except ReadTimeout: print('连接超时') except ConnectionError: print('网络问题') except RequestException: print("无网络")