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

网站建设yankt青岛谷歌推广

网站建设yankt,青岛谷歌推广,怎么去创建一个公司,手机官方一、requests简介 #简介#xff1a;使用requests可以模拟浏览器的请求#xff0c;比起之前用的urllib#xff0c;requests模块的api更加便捷#xff08;本质就是封装了urllib3#xff09;#注意#xff1a;requests库发送请求将网页内容下载下来以后#xff0c;并不会执… 一、requests简介 #简介使用requests可以模拟浏览器的请求比起之前用的urllibrequests模块的api更加便捷本质就是封装了urllib3#注意requests库发送请求将网页内容下载下来以后并不会执行js代码这需要我们自己分析目标站点然后发起新的request请求#安装pip3 install requests#各种请求方式常用的就是requests.get()和requests.post() import requestsr requests.get(https://api.github.com/events)r requests.post(http://httpbin.org/post, data {key:value})r requests.put(http://httpbin.org/put, data {key:value})r requests.delete(http://httpbin.org/delete)r requests.head(http://httpbin.org/get)r requests.options(http://httpbin.org/get) 二 、基于requests之GET请求 1、基本请求 import requests responserequests.get(http://dig.chouti.com/) print(response.text) # 字符串格式 content 二进制格式 2、带参数的GET请求-params # 在请求头内将自己伪装成浏览器否则百度不会正常返回页面内容 # 软件测试技术群603401995 url https://www.baidu.com/s?wd软件测试pn1 headers{User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36}import requests responserequests.get(urlurl, headersheaders) print(response.text)# 如果查询关键词是中文或者有其他特殊符号则不得不进行url编码 # 软件测试技术群603401995 from urllib.parse import urlencode wd软件测试 encode_resurlencode({k:wd},encodingutf-8) keywordencode_res.split()[1] print(keyword) # 然后拼接成url urlhttps://www.baidu.com/s?wd%spn1%keyword responserequests.get(url,headers{User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36}) res1response.text # 上述操作可以用requests模块的一个params参数搞定本质还是调用urlencode # 软件测试技术群603401995 from urllib.parse import urlencode wd软件测试 pn1responserequests.get(https://www.baidu.com/s,params{wd:wd,pn:pn},headers{User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36,}) res2response.text# 验证结果打开a.html与b.html页面内容一样 # 软件测试技术群603401995 with open(a.html,w,encodingutf-8) as f: f.write(res1) with open(b.html, w, encodingutf-8) as f: f.write(res2) 3、带参数的GET请求-headers #通常我们在发送请求时都需要带上请求头请求头是将自身伪装成浏览器的关键常见的有用的请求头如下 Host Referer #大型网站通常都会根据该参数判断请求的来源 User-Agent #客户端 Cookie #Cookie信息虽然包含在请求头里但requests模块有单独的参数来处理他headers{}内就不要放它了 #添加headers(浏览器会识别请求头,不加可能会被拒绝访问,比如访问https://www.zhihu.com/explore) import requests responserequests.get(https://www.zhihu.com/explore) response.status_code #500#自己定制headers headers{ User-Agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36, } responerequests.get(https://www.zhihu.com/explore,headersheaders) print(respone.status_code) #200 4、带参数的GET请求-cookies #登录github然后从浏览器中获取cookies以后就可以直接拿着cookie登录了无需输入用户名密码 #用户名:admin 邮箱123456qq.com 密码123456 import requests Cookies{user_session:wGMHFJKgDcmRIVvcA14_Wrt_3xaUyJNsBnPbYzEL6L0bHcfc, } responserequests.get(https://github.com/settings/emails,cookiesCookies) print(123456qq.com in response.text) #True 现在我也找了很多测试的朋友做了一个分享技术的交流群共享了很多我们收集的技术文档和视频教程。 如果你不想再体验自学时找不到资源没人解答问题坚持几天便放弃的感受 可以加入我们一起交流。而且还有很多在自动化性能安全测试开发等等方面有一定建树的技术大牛 分享他们的经验还会分享很多直播讲座和技术沙龙 可以免费学习划重点开源的 qq群号110685036 三 、基于POST请求 1、介绍 # GET请求 HTTP默认的请求方法就是GET 1.没有请求体 2.数据必须在1K之内 3.GET请求数据会暴露在浏览器的地址栏中 GET请求常用的操作 1. 在浏览器的地址栏中直接给出URL那么就一定是GET请求 2. 点击页面上的超链接也一定是GET请求 3. 提交表单时表单默认使用GET请求但可以设置为POST # POST请求 1.数据不会出现在地址栏中 2.数据的大小没有上限 3.有请求体 4.请求体中如果存在中文会使用URL编码 #requests.post()用法与requests.get()完全一致特殊的是requests.post()有一个data参数用来存放请求体数据 2、发送POST请求模拟浏览器的登录行为 #对于登录来说应该输错用户名或密码然后分析抓包流程用脑子想一想输对了浏览器就跳转了还分析个毛线累死你也找不到包 2 一 目标站点分析3 浏览器输入https://github.com/login4 然后输入错误的账号密码抓包5 发现登录行为是post提交到https://github.com/session6 而且请求头包含cookie7 而且请求体包含8 commit:Sign in9 utf8:✓ 10 authenticity_token:lbI8IJCwGslZS8qJPnof5e7ZkCoSoMn6jmDTsL1r/m06NLyIbw7vCrpwrFAPzHMep3Tmf/TSJVoXWrvDZaVwxQ 11 login:admin 12 password:123456 13 14 15 二 流程分析 16 先GEThttps://github.com/login拿到初始cookie与authenticity_token 17 返回POSThttps://github.com/session 带上初始cookie带上请求体authenticity_token用户名密码等 18 最后拿到登录cookie 19 20 ps如果密码时密文形式则可以先输错账号输对密码然后到浏览器中拿到加密后的密码github的密码是明文 21 22 23 import requests 24 import re 25 26 #第一次请求 27 r1requests.get(https://github.com/login) 28 r1_cookier1.cookies.get_dict() #拿到初始cookie(未被授权) 29 authenticity_tokenre.findall(rnameauthenticity_token.*?value(.*?),r1.text)[0] #从页面中拿到CSRF TOKEN 30 31 #第二次请求带着初始cookie和TOKEN发送POST请求给登录页面带上账号密码 32 data{ 33 commit:Sign in, 34 utf8:✓, 35 authenticity_token:authenticity_token, 36 login:123456qq.com, 37 password:alex3714 38 } 39 r2requests.post(https://github.com/session, 40 datadata, 41 cookiesr1_cookie 42 ) 43 44 45 login_cookier2.cookies.get_dict() 46 47 48 #第三次请求以后的登录拿着login_cookie就可以,比如访问一些个人配置 49 r3requests.get(https://github.com/settings/emails, 50 cookieslogin_cookie) 51 52 print(123456qq.com in r3.text) #True import requests import resessionrequests.session() #第一次请求 r1session.get(https://github.com/login) authenticity_tokenre.findall(rnameauthenticity_token.*?value(.*?),r1.text)[0] #从页面中拿到CSRF TOKEN #第二次请求 data{commit:Sign in,utf8:✓,authenticity_token:authenticity_token,login:123456qq.com,password:alex3714 } r2session.post(https://github.com/session,datadata,) #第三次请求 r3session.get(https://github.com/settings/emails) print(123456qq.com in r3.text) #True requests.session()自动帮我们保存cookie信息 3、补充 requests.post(urlxxxxxxxx,data{xxx:yyy}) #没有指定请求头,#默认的请求头:application/x-www-form-urlencoed #如果我们自定义请求头是application/json,并且用data传值, 则服务端取不到值 requests.post(url,data{:1,},headers{content-type:application/json}) requests.post(url,json{:1,},) #默认的请求头:application/json 四、 响应Response 1、response属性 import requests responerequests.get(http://www.jianshu.com) # respone属性 print(respone.text) print(respone.content) print(respone.status_code) print(respone.headers) print(respone.cookies) print(respone.cookies.get_dict()) print(respone.cookies.items()) print(respone.url) print(respone.history) print(respone.encoding) #关闭response.close() from contextlib import closing with closing(requests.get(xxx,streamTrue)) as response:for line in response.iter_content():pass 2、编码的问题 #编码问题 import requests responserequests.get(http://www.autohome.com/news) # response.encodinggbk #汽车之家网站返回的页面内容为gb2312编码的而requests的默认编码为ISO-8859-1如果不设置成gbk则中文乱码 print(response.text) 3、获取二进制数据 import requestsresponserequests.get(https://timgsa.baidu.com/timg?imagequality80sizeb9999_10000sec123456di712e4ef3ab258b36e9f4b48e85a81c9dimgtype0srchttp%3A%2F%2Fc.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F11385343fbf2b211e1fb58a1c08065380dd78e0c.jpg) with open(a.jpg,wb) as f:f.write(response.content) #stream参数:一点一点的取,比如下载视频时,如果视频100G,用response.content然后一下子写到文件中是不合理的 import requestsresponserequests.get(https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo-transcode/1767502_56ec685f9c7ec542eeaf6eac93a65dc7_6fe25cd1347c_3.mp4,streamTrue)with open(b.mp4,wb) as f:for line in response.iter_content():f.write(line) 4、解析json #解析json import requests responserequests.get(http://httpbin.org/get)import json res1json.loads(response.text) #太麻烦 res2response.json() #直接获取json数据 print(res1 res2) #True 5、Redirection and History import requests import re#第一次请求 r1requests.get(https://github.com/login) r1_cookier1.cookies.get_dict() #拿到初始cookie(未被授权) authenticity_tokenre.findall(rnameauthenticity_token.*?value(.*?),r1.text)[0] #从页面中拿到CSRF TOKEN#第二次请求带着初始cookie和TOKEN发送POST请求给登录页面带上账号密码 data{commit:Sign in,utf8:✓,authenticity_token:authenticity_token,login:123456qq.com,password:alex3714 }#测试一没有指定allow_redirectsFalse,则响应头中出现Location就跳转到新页面r2代表新页面的response r2requests.post(https://github.com/session,datadata,cookiesr1_cookie) print(r2.status_code) #200 print(r2.url) #看到的是跳转后的页面 print(r2.history) #看到的是跳转前的response print(r2.history[0].text) #看到的是跳转前的response.text#测试二指定allow_redirectsFalse,则响应头中即便出现Location也不会跳转到新页面r2代表的仍然是老页面的response r2requests.post(https://github.com/session,datadata,cookiesr1_cookie,allow_redirectsFalse)print(r2.status_code) #302 print(r2.url) #看到的是跳转前的页面https://github.com/session print(r2.history) #[] 五、高级用法 1、SSL Cert Verification #证书验证(大部分网站都是https) import requests responerequests.get(https://www.12306.cn) #如果是ssl请求,首先检查证书是否合法,不合法则报错,程序终端#改进1:去掉报错,但是会报警告 import requests responerequests.get(https://www.12306.cn,verifyFalse) #不验证证书,报警告,返回200 print(respone.status_code)#改进2:去掉报错,并且去掉警报信息 import requests from requests.packages import urllib3 urllib3.disable_warnings() #关闭警告 responerequests.get(https://www.12306.cn,verifyFalse) print(respone.status_code)#改进3:加上证书 #很多网站都是https,但是不用证书也可以访问,大多数情况都是可以携带也可以不携带证书 #知乎\百度等都是可带可不带 #有硬性要求的,则必须带比如对于定向的用户,拿到证书后才有权限访问某个特定网站 import requests responerequests.get(https://www.12306.cn,cert(/path/server.crt,/path/key)) print(respone.status_code) 2、使用代理 #官网链接: http://docs.python-requests.org/en/master/user/advanced/#proxies#代理设置:先发送请求给代理,然后由代理帮忙发送(封ip是常见的事情) import requests proxies{http:http://egon:123localhost:9743,#带用户名密码的代理,符号前是用户名与密码http:http://localhost:9743,https:https://localhost:9743, } responerequests.get(https://www.12306.cn,proxiesproxies)print(respone.status_code)#支持socks代理,安装:pip install requests[socks] import requests proxies {http: socks5://user:passhost:port,https: socks5://user:passhost:port } responerequests.get(https://www.12306.cn,proxiesproxies) print(respone.status_code) 3、超时设置 #超时设置 #两种超时:float or tuple #timeout0.1 #代表接收数据的超时时间 #timeout(0.1,0.2)#0.1代表链接超时 0.2代表接收数据的超时时间import requests responerequests.get(https://www.baidu.com,timeout0.0001) 4、认证设置 #官网链接http://docs.python-requests.org/en/master/user/authentication/# 认证设置:登陆网站是,弹出一个框,要求你输入用户名密码与alter很类似此时是无法获取html的 # 但本质原理是拼接成请求头发送r.headers[Authorization] _basic_auth_str(self.username, self.password) # 一般的网站都不用默认的加密方式都是自己写 # 那么我们就需要按照网站的加密方式自己写一个类似于_basic_auth_str的方法 # 得到加密字符串后添加到请求头 # r.headers[Authorization] func(.....)#看一看默认的加密方式吧通常网站都不会用默认的加密设置 import requests from requests.auth import HTTPBasicAuth rrequests.get(xxx,authHTTPBasicAuth(user,password)) print(r.status_code)#HTTPBasicAuth可以简写为如下格式 import requests rrequests.get(xxx,auth(user,password)) print(r.status_code) 5、异常处理 #异常处理 import requests from requests.exceptions import * #可以查看requests.exceptions获取异常类型 try:rrequests.get(http://www.baidu.com,timeout0.00001) except ReadTimeout:print(:) # except ConnectionError: #网络不通 # print(-----) # except Timeout: # print(aaaaa) except RequestException:print(Error) 6、上传文件 import requests files{file:open(a.jpg,rb)} responerequests.post(http://httpbin.org/post,filesfiles) print(respone.status_code)今天的分享就到此结束了大家还有什么不懂的可以评论区下提问哈如果我的文章对你有所帮助的话可以点赞三联支持一下哈
http://www.huolong8.cn/news/262907/

相关文章:

  • 智能锁东莞网站建设手机端网站做app
  • 东莞南城网站设计怎么去建一个网站
  • wordpress小说站群各种网站都能打开的浏览器
  • 企业网站改版项目描述做服务网站发展背景
  • wap网站制作需要多少钱企业管理培训课程推广
  • 怎么更改网站备案信息吗做3d模型的叫什么牛的网站
  • 响应式网站设计布局张北网站建设
  • 做游戏网站赚钱么院网站建设情况报告
  • 网站怎么伪静态网站新农村网站建设
  • 苏州乡村旅游网站建设策划书做家具的企业网站
  • 商丘企业做网站网站请人做的 域名自己注册的 知道网站后台 怎么挂自己的服务器
  • 织梦框架做网站简单沧州各种网站
  • 网站建设的好不好网站建设知识及维护技巧
  • 暗网是什么网站网络推广专员百度百聘
  • 灯光设计网站推荐平面设计鉴赏网站
  • 医院网站前置审核遵义你想网
  • 网站歌曲代码开发小程序软件的公司
  • 网站运营优化推广手机上怎么修改wordpress
  • 网站开发的书籍有什么网站可以接单做兼职的
  • 网站设计 导航条烟台网络公司排名
  • 网站外链建设与文章发布规范交友小程序源码
  • 无锡网站排名推广wordpress虎嗅
  • 云南云桥建设股份有限公司官方网站做结构图的网站
  • 网站图片轮播怎么做织梦网站模块
  • 网站建设 我们是专业的网站备案号 主体备案号
  • 网站查询站长工具wordpress自动添加html后缀
  • 网站建设部门的职责淘宝内部卷网站怎么做
  • wordpress 仿站 教程衡水移动网站建设价格
  • 全国十大网站设计工作室上海优化网站公司
  • 养猪网站建设规划书在线网页传输文件