Fiddler这玩意怎么用,用起来没有chrome舒服啊
Requests库的七个主要方法:
requests.request():构造一个请求,支撑一下各方法的基础方法----我的理解是下面六种方法的另一种写法:requests.request(method,url,**kwargs)
requests.get():获取HTML网页的主要方法,对应HTTP的GET
requests.head():获取HTML网页头的信息方法,对应HTTP的HEAD
requests.post():向HTML网页提交POST请求方法,对应HTTP的POST
requests.put():向HTML网页提交PUT请求的方法,对应HTTP的RUT
requests.patch():向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete():向HTML页面提交删除请求,对应HTTP的DELETE
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
URL格式:http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的路径
def request(self, method, url,
params=None, data=None, headers=None, cookies=None, files=None,
auth=None, timeout=None, allow_redirects=True, proxies=None,
hooks=None, stream=None, verify=None, cert=None, json=None):
各种方法的参数**kwargs:控制访问的参数,均为可选项:
params:字典或字节序列,作为参数增加到url中----------GET方法的数据传输:---那么所谓的字节序列是指????
data:字典,字节序列或文件对象,作为Request的内容--------POST方法的数据传输,不仅可以发送字典,应该也可以发送json字符串?
json:JSON格式的数据,作为Request的内容
headers:字典,HTTP定制头(模拟浏览器进行访问)
cookies:字典或CpplieJar,Request中的cookie #这个经过测试,貌似不是请求头里的cookies,而是响应头的cookies:同一个url,使用session连续访问2次,第一次有cookies,第二次没有;也就是说只会储存新的cookies????
auth:元祖,支持HTTP认证功能
files:字典类型,传输文件
timeout:设定超时时间,秒为单位
proxies:字典类型,设定访问代理服务器,可以增加登陆认证
allow_redirects:True//False,默认为True,重定向开关
stream:True/False,默认为True,获取内容立即下载开关
verify:True/False,默认为True,认证SSL证书开关
cert:本地SSL证书路径"""
Response对象的属性及方法
r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.requests.headers #可以查看请求头的内容
r.encoding来获取网页编码
r.history查看是否有跳转记录
#*特殊方法*#
r.json() #Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常
上传文件
url = 'http://127.0.0.1:5000/upload'
files = {'file': open('/home/lyb/sjzl.mpg', 'rb')}
#files = {'file': ('report.jpg', open('/home/lyb/sjzl.mpg', 'rb'))} #显式的设置文件名
r = requests.post(url, files=files)
可以把字符串当做文件上传
url = 'http://127.0.0.1:5000/upload'
files = {'file': ('test.txt', b'Hello Requests.')} #必需显式的设置文件名
r = requests.post(url, files=files)
基本身份认证(HTTP Basic Auth)这个暂时还没碰到需求
import requests
from requests.auth import HTTPBasicAuth
r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=HTTPBasicAuth('user', 'passwd'))
# r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=('user', 'passwd')) # 简写
另一种非常流行的HTTP身份认证形式是摘要式身份认证,Requests对它的支持也是开箱即可用的:
requests.get(URL, auth=HTTPDigestAuth('user', 'pass'))
会话对象让你能够跨请求保持某些参数,最方便的是在同一个Session实例发出的所有请求之间保持cookies,且这些都是自动处理的,甚是方便。
这里未复制实例
https://www.cnblogs.com/puyangsky/p/5326384.html 通过chrome检查浏览器登录知乎时,需要提交数据的参数有四个分别是:_xsrf、password、remember_me和email XSRF为跨站请求伪造(Cross-site request forgery)这个参数目的就是为了防范XSRF攻击而设置的一个hash值,每次访问主页都会生成这样一个唯一的字符串。 经过代码查看,每次访问知乎首页都会有一个隐藏的input标签,name=_xsrf 所以登录知乎,第一次先去获取_xsrf的值,第二次访问登录的url,同时提交数据 import requests import re def getContent(url): #使用requests.get获取知乎首页的内容 r = requests.get(url) #request.get().content是爬到的网页的全部内容 return r.content #获取_xsrf标签的值 def getXSRF(url): #获取知乎首页的内容 content = getContent(url) #正则表达式的匹配模式 pattern = re.compile('.*?<input type="hidden" name="_xsrf" value="(.*?)"/>.*?') #re.findall查找所有匹配的字符串 match = re.findall(pattern, content) xsrf = match[0] #返回_xsrf的值 return xsrf #登录的主方法 def login(baseurl,email,password): #post需要的表单数据,类型为字典 login_data = { '_xsrf': getXSRF(baseurl), 'password': password, 'remember_me': 'true', 'email': email, } #设置头信息 headers_base = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2', 'Connection': 'keep-alive', 'Host': 'www.zhihu.com', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36', 'Referer': 'http://www.zhihu.com/', } #使用seesion登录,这样的好处是可以在接下来的访问中可以保留登录信息 session = requests.session() #登录的URL baseurl += "/login/email" #requests 的session登录,以post方式,参数分别为url、headers、data content = session.post(baseurl, headers = headers_base, data = login_data) #成功登录后输出为 {"r":0, #"msg": "\u767b\u9646\u6210\u529f" #} print content.text #再次使用session以get去访问知乎首页,一定要设置verify = False,否则会访问失败 s = session.get("http://www.zhihu.com", verify = False) print s.text.encode('utf-8') #把爬下来的知乎首页写到文本中 f = open('zhihu.txt', 'w') f.write(s.text.encode('utf-8')) url = "http://www.zhihu.com" #进行登录,将星号替换成你的知乎登录邮箱和密码即可 login(url,"******@***.com","************")
这个网址的整理了一半
https://www.cnblogs.com/mrchige/p/6409444.html