当前位置: 首页 > news >正文

python康复日记-request库的使用,爬虫自动化测试

一,request的简单应用

#1请求地址
URL='https://example.com/login'
#2参数表单
form_data = {'username': 'admin','password': 'secret'
}
#3返回的响应对象response
response = requests.post(URL,data=form_data,timeout=5
)
#4处理返回结果,这里直接打印返回网页的正文。通常需要json转化,和encode编码下
print(reponse.content)

1,请求头需要设置,有些网站会限制访问

    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36','Referer': 'https://www.99csw.com/','Accept-Language': 'zh-CN,zh;q=0.9'}try:# 发送HTTP请求response = requests.get(url, headers=headers, timeout=15)

2,response的属性

发送request请求后,返回的reponse对象里有我们要的信息,需要处理。常用的3个标粗了。

属性/方法类型/返回类型说明
status_codeintHTTP 状态码(如 200、404、500)
headersCaseInsensitiveDict响应头字典(不区分大小写)
textstr解码后的文本内容(自动根据 encoding 解码)
contentbytes原始字节内容(未解码的二进制数据)
json()dict/list解析 JSON 响应内容(非 JSON 内容会抛异常)
urlstr最终请求的 URL(含重定向后的地址)
encodingstr响应内容的编码格式(可手动修改)
apparent_encodingstr通过内容分析出的编码格式(自动检测)
rawHTTPResponse原始响应流对象(需配合 stream=True 使用)
cookiesRequestsCookieJar服务器返回的 Cookies
elapseddatetime.timedelta请求耗时(从发送到响应完成的时间)
historylist[Response]重定向历史记录列表
reasonstr状态码的文本描述(如 200 → "OK",404 → "Not Found")
requestPreparedRequest关联的请求对象(含请求头、方法、URL 等信息)

rep = reponse.content.decode('utf8'),content获取的正文是二进制,注意编码。

正文处理通常需要 json格式化 和 re正则模块 的匹配。

#对返回content正文中,span标签的获取,标题内容获取
pattern1 = re.compile(r'<span class="title">([^&]*?)</span>')
titles = pattern1.findall(resp.text)

3,session会话保持,处理cookie,保持会话。

Session 对象存储特定用户会话所需的属性及配置信息。可以带上cookie含帐号密码。

成功登陆之后,直接获取返回响应的cookie

def login():login_url = 'http://www.xxx.com/login'headers = {"Accept": "application/json, text/javascript, */*; q=0.01"}body = {"usercode": "liuzz05@****.com","password": "123456"}try:res = requests.post(url=login_url, headers=headers, data=body)cookies = res.cookiescookie = requests.utils.dict_from_cookiejar(cookies)return cookieexcept Exception as err:print('获取cookie失败:\n{0}'.format(err))

如果没有,先登录,从浏览器工具栏取cookie,找信息。

F12检查请求。cookie里有大串字母,password,token等字样说明这个可能是带密码账号的cookie,要具体情况定。

直接使用cookie,或者把cookie放在header参数中,依据具体网站请求头格式而定

把cookie转化为字典格式,手动扣cookie的键值对。本地文件写入分析,拼接

def get_data():cookie = login()res = requests.get(url=get_data_url, cookies=cookie)print(res.text)

def get_data():cookie = login()headers = {"cookie": cookie}res = requests.get(url=get_data_url, headers=headers)print(res.text)

一个完整的登录案例。

def auto_login():s = requests.Session()r = s.get(login_url)bs = BeautifulSoup(r.text,'html.parser')image = bs.find("img", {"id": "vcJpeg"})['src']lt_data = bs.find("input", {"name": "lt"})['value']csr_data = bs.find("input", {"name": "csrftoken"})['value']sec_data = bs.find("input", {"name": "sec"})['value']#print(lt_data,",",csr_data,",",sec_data)rootdir="http://172.16.5.12:10086"ir = s.get(rootdir+image)if ir.status_code == 200:with open('valid.jpg', 'wb') as f:f.write(ir.content);f.close();validateCode = get_code(Image.open('valid.jpg'))  # 通过本地图片解析验证码print(validateCode)postdata={'csrftoken': csr_data,'username': uosp_username,'password': base64.b64encode(uosp_passwd.encode('utf-8')),'institute': '00010000','validateCode': validateCode,'lt': lt_data,'sec': sec_data,'dn': '','ip': '144.4.44.44','_eventId':'submit',}print(postdata)form_data={"action":"GetINCInfoByID","id":"INC000287932",}s.post(login_url,data = postdata)s.post(incident_url,data = form_data)s.post(servicelogin_url)cookies_dict = requests.utils.dict_from_cookiejar(s.cookies)  # 登录后页面的cookie转化为dict#print("cookies is that ",cookies_dict)if ('.ASPXUSERDEMO' in  cookies_dict):  # 如果登录成功,cookie中会有.ASPXUSERDEMO字段值cookies = open('login_cookies', 'w')cookies.write(str(cookies_dict))  # 将cookie信息写入本地文件,其他模块直接访问文件可以绕过登录cookies.close()return selse:return None


http://www.mrgr.cn/news/95951.html

相关文章:

  • 26考研——图_图的存储(6)
  • 26考研——图(6)
  • 2.基于多线程的TCP服务器实现
  • sql server如何提高索引命中率
  • 亚马逊云科技全面托管DeepSeek-R1模型现已上线
  • 【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权主体功能开发
  • 142. 环形链表 II——考察数学,难!
  • 26考研——图_图的应用(6)
  • Proximal Policy Optimization(PPO)算法
  • Flutter项目之table页面实现
  • 【Python】pillow库学习笔记1-Image类
  • 1.基于TCP的简单套接字服务器实现
  • AI深度思考系列——大模型被当成了某度
  • 【Hugging Face 开源库】Diffusers 库 —— 扩散模型
  • LeetCode 第25、27、28题
  • Axure项目实战:智慧城市APP(三)教育查询(显示与隐藏交互)
  • 利用Openfeign远程调用第三方接口(案例:百度地图逆地理编码接口,实现通过经纬度坐标获取详细地址)
  • wokwi arduino mega 2560 - 键盘与LCD显示
  • 26考研——图_图的遍历(6)
  • 小爱控制OK影视搜索视频-HomeAssistant详细自动化流程