爬虫系统学习3——chrome分析post与json
目录
- 1、寻找post地址
- (1)找到js位置——用选择工具选择有js事件的按钮,在事件监听器中跳转到对应的 js 文件
- (1)找到js位置——search all files
- (2)当遇到不清楚的js操作时,都可以在console 里进行尝试
- (3)js添加断点debug
- (4)总结1——寻找登录的post地址
- (5)总结2——定位想要的js
- 2、requests 小技巧
- (1)cookie对象转化为字典 或 字典转化为cookie对象
- (2)url 解码 、 编码
- (3)请求 SSL 证书验证
- (4)设置超时参数timeout、配合状态码判断是否请求成功 assert、retry装饰器
1、寻找post地址
post_data字典中的键是 input 标签下 name 属性对应的值
(1)找到js位置——用选择工具选择有js事件的按钮,在事件监听器中跳转到对应的 js 文件
(1)找到js位置——search all files
(2)当遇到不清楚的js操作时,都可以在console 里进行尝试
(3)js添加断点debug
(4)总结1——寻找登录的post地址
- 在form表单中寻找action对应的url地址
- post的数据是input标签中name的值作为键,真正的用户名密码作为值的字典,post的url地址就是action对应的url地址
- 抓包,寻找登录的url地址
- 勾选perserve log按钮,防止页面跳转找不到url
- 寻找post数据,确定参数
- 参数不会变,直接用,比如密码不是动态加密的时候参数会变
- 参数会变
- 参数在当前的响应中
- 通过js生成
(5)总结2——定位想要的js
- 选择会触发js时间的按钮,点击event listener,找到is的位置
- 通过chrome中的search all file来搜索url中关键字
- 添加断点的方式来查看js的操作,通过python来进行同样的操作
2、requests 小技巧
(1)cookie对象转化为字典 或 字典转化为cookie对象
import requests
r = requests.get('http://www.baidu.com')
# 将 cookie 转化为 字典
print(r.cookies)
print()
res=requests.utils.dict_from_cookiejar(r.cookies)
print(res)
# 将字典转化为 cookie (会有信息缺失)
res_cook = requests.utils.cookiejar_from_dict(res)
print()
print(res_cook)
(2)url 解码 、 编码
print(requests.utils.unquote('http%3a%2f%2fwww.baidu.com'))
print(requests.utils.quote('http://baidu.com'))
(3)请求 SSL 证书验证
出现 SSLERROR
requests.get(url,verify=False)
(4)设置超时参数timeout、配合状态码判断是否请求成功 assert、retry装饰器
from retrying import retry
import requests
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'}
@retry(stop_max_attempt_number=3)# 下面的程序允许报错三次,超过三次整个程序报错
def _parse_url(url,method,data):
print("*"*20)# 判断程序执行次数
if method=='POST':
r =requests.post(url,headers=headers,data=data)
else:
r = requests.get(url,headers=headers,timeout=3)
assert r.status_code==200
return r.content.decode()
def parse_url(url,method='GET',data=None):
try:
html_str=_parse_url(url,method,data)
except:
html_str=None
return html_str
if __name__=='__main__':
print(parse_url('www.baidu.com'))