requests中解决编解码问题的办法
response.content.decode()
response.content.decode(“gbk”)
response.text
处理cookies、session请求(复习)
requests提供了一个叫做session类,来实现客户端和服务端的会话保持
使用方法:
1.实例化一个session对象
2.让session发送get或者post请求
session = requests.session()
response = session.get(url,headers)
如果一个网站的action中没有url地址,我们应该寻找post的url地址
寻找登录的post地址
在form表单中寻找action对应的url地址
post数据是input标签中name的值作为键,真正的用户名密码作为值的字典,post的url地址就是action对应的url地址
在登录过程中首先发送一个rkey、password请求,然后是将这些请求的结果放到post请求群里面,发送post请求
抓包,寻找登录的url地址
勾选perserve按钮,防止页面跳转找不到url地址,或者输入错误的password
寻找post数据,确定参数。参数会变可能在当前的响应中,通过js生成;
定位想要的js
选择会触发js事件的按钮,点击event lisenter,找到js的位置
通过chrome中的search all file来搜索url中的关键字
添加断点的操作查看js的操作,通过python来进行同样的操作
requests小技巧
1.requests.util.dict_from_cookiejar 把cookie对象转化为字典
import requests
#requests.utils.unquote("url编码") #url地址解码
#requests.utils.quote("url") #url地址编码
response = requests.get("https://baidu.com")
print(response.cookies)
print(requests.utils.dict_from_cookiejar(response.cookies))
print(requests.utils.cookiejar_from_dict({'BDORZ': '27315'})) #字典转化成cookie,仅仅传入了一堆键值对,会造成cookie的缺失
运行结果:
2.请求SSL证书验证
response = requests.get(“https:// …”,verify = False)
如果某https网站没有SSL认证证书的话,想要拿到直接的requests会报错(SSLError),这个时候veritf = False就可以跳过证书获取响应,默认verify是True
3.设置超时
response = requests.get(url,timeout = 10)
超时参数:强制要求响应在指定的时间内执行完
在实际生活中我们如果发现某个网站不能请求,我们会刷新,我们要导入一个retrying模块
4.配合状态码判断是否请求成功
assert response.status——code = 200
下面我们来通过一个例子整体看一下以上4点的用法:
import requests
from retrying import retry
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 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))
数据的分类
数据提取: 简单的来说就是从响应中获得我们想要的数据的过程
非结构化数据:html等
处理方法:正则表达式、xpath
结构化数据:json、xml等
处理方法:转化为python数据类型