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.cookies
        cookie = requests.utils.dict_from_cookiejar(cookies)
        return cookie
    except 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 s
    else:
            return None

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值