网站建设工作流程,江苏网站建设效果好,成都外贸网站建设费用,中国新闻社江西分社文章目录一.简介二.基本GET请求1.最基本的GET请求--直接用get方法2.添加 headers 和查询参数parmas3.通过requests获取网络上图片的大小三.基本POST请求1.传入data数据四.代理#xff08;proxies参数#xff09;五.私密代理六.web客户端验证七.Cookies 和 Sission1.Cookies2.…
文章目录一.简介二.基本GET请求1.最基本的GET请求--直接用get方法2.添加 headers 和查询参数parmas3.通过requests获取网络上图片的大小三.基本POST请求1.传入data数据四.代理proxies参数五.私密代理六.web客户端验证七.Cookies 和 Sission1.Cookies2.Session八.处理HTTPS请求 SSL证书验证一.简介
虽然Python的标准库中 urllib 模块已经包含了平常我们使用的大多数功能但是它的 API 使用起来让人感觉不太好而 Requests 自称 “HTTP for Humans”说明使用更简洁方便。
requests 的底层实现其实就是 urllib它继承了urllib的所有特性。Requests支持HTTP连接保持和连接池支持使用cookie保持会话支持文件上传支持自动确定响应内容的编码支持国际化的 URL 和 POST 数据自动编码。
利用 pip 安装 或者利用 easy_install 都可以完成安装
$ pip install requests$ easy_install requests
二.基本GET请求
1.最基本的GET请求–直接用get方法
response.text和response.content的区别 response.content这个是直接从网络上面抓取的数据。没有经过任何解码。所以是一个bytes类型。其实在硬盘上和在网络上传输的字符串都是bytes类型。 response.text这个是str的数据类型是requests库将response.content进行解码的字符串。解码需要指定一个编码方式requests会根据自己的猜测来判断编码的方式。所以有时候可能会猜测错误就会导致解码产生乱码。这时候就应该使用response.content.decode(‘utf-8’)进行手动解码。
import requestsresponse requests.get(http://www.baidu.com/)print(----------)
print(response.request.headers)
print(----------)
print(response.text)
print(----------)
print(response.content)
输出结果
----------
{User-Agent: python-requests/2.22.0, Accept-Encoding: gzip, deflate, Accept: */*, Connection: keep-alive}
----------
!DOCTYPE html
!--STATUS OK--html headmeta http-equivcontent-type contenttext/html;charsetutf-8meta http-equivX-UA-Compatible contentIEEdgemeta contentalways namereferrerlink relstylesheet typetext/css hrefhttp://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.csstitleç™¾åº¦ä¸€ä¸‹ï¼Œä½ å°±çŸ¥é“/title/head body link#0000cc div idwrapper div idhead div classhead_wrapper div classs_form div classs_form_wrapper div idlg img hidefocustrue src//www.baidu.com/img/bd_logo1.png width270 height129 /div form idform namef action//www.baidu.com/s classfm input typehidden namebdorz_come value1 input typehidden nameie valueutf-8 input typehidden namef value8 input typehidden namersv_bp value1 input typehidden namersv_idx value1 input typehidden nametn valuebaiduspan classbg s_ipt_wrinput idkw namewd classs_ipt value maxlength255 autocompleteoff autofocus/spanspan classbg s_btn_wrinput typesubmit idsu value百度一下 classbg s_btn/span /form /div /div div idu1 a hrefhttp://news.baidu.com nametj_trnews classmnavæ–°é—»/a a hrefhttp://www.hao123.com nametj_trhao123 classmnavhao123/a a hrefhttp://map.baidu.com nametj_trmap classmnav地图/a a hrefhttp://v.baidu.com nametj_trvideo classmnav视频/a a hrefhttp://tieba.baidu.com nametj_trtieba classmnavè´´å§/a noscript a hrefhttp://www.baidu.com/bdorz/login.gif?loginamp;tplmnamp;uhttp%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 nametj_login classlb登录/a /noscript scriptdocument.write(a hrefhttp://www.baidu.com/bdorz/login.gif?logintplmnu encodeURIComponent(window.location.href (window.location.search ? ? : ) bdorz_come1) nametj_login classlb登录/a);/script a href//www.baidu.com/more/ nametj_briicon classbri styledisplay: block;更多产å“/a /div /div /div div idftCon div idftConw p idlh a hrefhttp://home.baidu.comå
³äºŽç™¾åº¦/a a hrefhttp://ir.baidu.comAbout Baidu/a /p p idcpcopy;2017nbsp;Baidunbsp;a hrefhttp://www.baidu.com/duty/使用百度å‰å¿
读/anbsp; a hrefhttp://jianyi.baidu.com/ classcp-feedbackæ„è§å馈/anbsp;京ICPè¯030173å·nbsp; img src//www.baidu.com/img/gs.gif /p /div /div /div /body /html----------
b!DOCTYPE html\r\n!--STATUS OK--html headmeta http-equivcontent-type contenttext/html;charsetutf-8meta http-equivX-UA-Compatible contentIEEdgemeta contentalways namereferrerlink relstylesheet typetext/css hrefhttp://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.csstitle\xe7\x99\xbe\xe5\xba\xa6\xe4\xb8\x80\xe4\xb8\x8b\xef\xbc\x8c\xe4\xbd\xa0\xe5\xb0\xb1\xe7\x9f\xa5\xe9\x81\x93/title/head body link#0000cc div idwrapper div idhead div classhead_wrapper div classs_form div classs_form_wrapper div idlg img hidefocustrue src//www.baidu.com/img/bd_logo1.png width270 height129 /div form idform namef action//www.baidu.com/s classfm input typehidden namebdorz_come value1 input typehidden nameie valueutf-8 input typehidden namef value8 input typehidden namersv_bp value1 input typehidden namersv_idx value1 input typehidden nametn valuebaiduspan classbg s_ipt_wrinput idkw namewd classs_ipt value maxlength255 autocompleteoff autofocus/spanspan classbg s_btn_wrinput typesubmit idsu value\xe7\x99\xbe\xe5\xba\xa6\xe4\xb8\x80\xe4\xb8\x8b classbg s_btn/span /form /div /div div idu1 a hrefhttp://news.baidu.com nametj_trnews classmnav\xe6\x96\xb0\xe9\x97\xbb/a a hrefhttp://www.hao123.com nametj_trhao123 classmnavhao123/a a hrefhttp://map.baidu.com nametj_trmap classmnav\xe5\x9c\xb0\xe5\x9b\xbe/a a hrefhttp://v.baidu.com nametj_trvideo classmnav\xe8\xa7\x86\xe9\xa2\x91/a a hrefhttp://tieba.baidu.com nametj_trtieba classmnav\xe8\xb4\xb4\xe5\x90\xa7/a noscript a hrefhttp://www.baidu.com/bdorz/login.gif?loginamp;tplmnamp;uhttp%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 nametj_login classlb\xe7\x99\xbb\xe5\xbd\x95/a /noscript scriptdocument.write(\a hrefhttp://www.baidu.com/bdorz/login.gif?logintplmnu\ encodeURIComponent(window.location.href (window.location.search ? ? : ) bdorz_come1) \ nametj_login classlb\xe7\x99\xbb\xe5\xbd\x95/a\);/script a href//www.baidu.com/more/ nametj_briicon classbri styledisplay: block;\xe6\x9b\xb4\xe5\xa4\x9a\xe4\xba\xa7\xe5\x93\x81/a /div /div /div div idftCon div idftConw p idlh a hrefhttp://home.baidu.com\xe5\x85\xb3\xe4\xba\x8e\xe7\x99\xbe\xe5\xba\xa6/a a hrefhttp://ir.baidu.comAbout Baidu/a /p p idcpcopy;2017nbsp;Baidunbsp;a hrefhttp://www.baidu.com/duty/\xe4\xbd\xbf\xe7\x94\xa8\xe7\x99\xbe\xe5\xba\xa6\xe5\x89\x8d\xe5\xbf\x85\xe8\xaf\xbb/anbsp; a hrefhttp://jianyi.baidu.com/ classcp-feedback\xe6\x84\x8f\xe8\xa7\x81\xe5\x8f\x8d\xe9\xa6\x88/anbsp;\xe4\xba\xacICP\xe8\xaf\x81030173\xe5\x8f\xb7nbsp; img src//www.baidu.com/img/gs.gif /p /div /div /div /body /html\r\n
2.添加 headers 和查询参数parmas
如果想添加 headers可以传入headers参数来增加请求头中的headers信息。如果要将参数放在url中传递可以利用 params 参数。
import requestskw {wd:长城}headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36}# params 接收一个字典或者字符串的查询参数字典类型自动转换为url编码不需要urlencode()
response requests.get(http://www.baidu.com/s?, params kw, headers headers)print(-----1-----)
print(response.request.headers)# 查看响应内容response.text 返回的是Unicode格式的数据
print(-----2-----)
print (response.text)# # 查看响应内容response.content返回的字节流数据
print(-----3-----)
print (response.content)print(-----4-----)
print (response.content.decode())# 查看完整url地址
print(----------------------5----------------------------)
print (response.url)# 查看响应头部字符编码
print(-----6-----)
print (response.encoding)# 查看响应码
print(-----7-----)
print (response.status_code)输出结果
-----1-----
{User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36, Accept-Encoding: gzip, deflate, Accept: */*, Connection: keep-alive}
-----2-----
!DOCTYPE html
html langzh-CN
headmeta charsetutf-8title百度安å
¨éªŒè¯/titlemeta http-equivContent-Type contenttext/html; charsetutf-8meta nameapple-mobile-web-app-capable contentyesmeta nameapple-mobile-web-app-status-bar-style contentblackmeta nameviewport contentwidthdevice-width, user-scalableno, initial-scale1.0, minimum-scale1.0, maximum-scale1.0meta nameformat-detection contenttelephoneno, emailnolink relshortcut icon hrefhttps://www.baidu.com/favicon.ico typeimage/x-iconlink relicon sizesany mask hrefhttps://www.baidu.com/img/baidu.svgmeta http-equivX-UA-Compatible contentIEEdgemeta http-equivContent-Security-Policy contentupgrade-insecure-requestslink relstylesheet hrefhttps://wappass.bdimg.com/static/touch/css/api/mkdjump_8befa48.css /
/head
bodydiv classtimeout hidediv classtimeout-img/divdiv classtimeout-title网络ä¸ç»™åŠ›ï¼Œè¯·ç¨åŽé‡è¯•/divbutton typebutton classtimeout-button返回首页/button/divdiv classtimeout-feedback hidediv classtimeout-feedback-icon/divp classtimeout-feedback-title问题å馈/p/divscript srchttps://wappass.baidu.com/static/machine/js/api/mkd.js/script
script srchttps://wappass.bdimg.com/static/touch/js/mkdjump_6003cf3.js/script
/body
/html
-----3-----
b!DOCTYPE html\nhtml langzh-CN\nhead\n meta charsetutf-8\n title\xe7\x99\xbe\xe5\xba\xa6\xe5\xae\x89\xe5\x85\xa8\xe9\xaa\x8c\xe8\xaf\x81/title\n meta http-equivContent-Type contenttext/html; charsetutf-8\n meta nameapple-mobile-web-app-capable contentyes\n meta nameapple-mobile-web-app-status-bar-style contentblack\n meta nameviewport contentwidthdevice-width, user-scalableno, initial-scale1.0, minimum-scale1.0, maximum-scale1.0\n meta nameformat-detection contenttelephoneno, emailno\n link relshortcut icon hrefhttps://www.baidu.com/favicon.ico typeimage/x-icon\n link relicon sizesany mask hrefhttps://www.baidu.com/img/baidu.svg\n meta http-equivX-UA-Compatible contentIEEdge\n meta http-equivContent-Security-Policy contentupgrade-insecure-requests\n link relstylesheet hrefhttps://wappass.bdimg.com/static/touch/css/api/mkdjump_8befa48.css /\n/head\nbody\n div classtimeout hide\n div classtimeout-img/div\n div classtimeout-title\xe7\xbd\x91\xe7\xbb\x9c\xe4\xb8\x8d\xe7\xbb\x99\xe5\x8a\x9b\xef\xbc\x8c\xe8\xaf\xb7\xe7\xa8\x8d\xe5\x90\x8e\xe9\x87\x8d\xe8\xaf\x95/div\n button typebutton classtimeout-button\xe8\xbf\x94\xe5\x9b\x9e\xe9\xa6\x96\xe9\xa1\xb5/button\n /div\n div classtimeout-feedback hide\n div classtimeout-feedback-icon/div\n p classtimeout-feedback-title\xe9\x97\xae\xe9\xa2\x98\xe5\x8f\x8d\xe9\xa6\x88/p\n /div\n\nscript srchttps://wappass.baidu.com/static/machine/js/api/mkd.js/script\nscript srchttps://wappass.bdimg.com/static/touch/js/mkdjump_6003cf3.js/script\n/body\n/html
-----4-----
!DOCTYPE html
html langzh-CN
headmeta charsetutf-8title百度安全验证/titlemeta http-equivContent-Type contenttext/html; charsetutf-8meta nameapple-mobile-web-app-capable contentyesmeta nameapple-mobile-web-app-status-bar-style contentblackmeta nameviewport contentwidthdevice-width, user-scalableno, initial-scale1.0, minimum-scale1.0, maximum-scale1.0meta nameformat-detection contenttelephoneno, emailnolink relshortcut icon hrefhttps://www.baidu.com/favicon.ico typeimage/x-iconlink relicon sizesany mask hrefhttps://www.baidu.com/img/baidu.svgmeta http-equivX-UA-Compatible contentIEEdgemeta http-equivContent-Security-Policy contentupgrade-insecure-requestslink relstylesheet hrefhttps://wappass.bdimg.com/static/touch/css/api/mkdjump_8befa48.css /
/head
bodydiv classtimeout hidediv classtimeout-img/divdiv classtimeout-title网络不给力请稍后重试/divbutton typebutton classtimeout-button返回首页/button/divdiv classtimeout-feedback hidediv classtimeout-feedback-icon/divp classtimeout-feedback-title问题反馈/p/divscript srchttps://wappass.baidu.com/static/machine/js/api/mkd.js/script
script srchttps://wappass.bdimg.com/static/touch/js/mkdjump_6003cf3.js/script
/body
/html
----------------------5----------------------------
https://wappass.baidu.com/static/captcha/tuxing.html?akc27bbc89afca0463650ac9bde68ebe06backurlhttps%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%25E9%2595%25BF%25E5%259F%258Elogid9931754313911722977signaturee44e6266c70740aa0955def31c517835timestamp1587817039
-----6-----
ISO-8859-1
-----7-----
2003.通过requests获取网络上图片的大小
from io import BytesIO,StringIO
import requests
from PIL import Image
img_url http://imglf1.ph.126.net/pWRxzh6FRrG2qVL3JBvrDg/6630172763234505196.png
response requests.get(img_url)
f BytesIO(response.content)
img Image.open(f)
print(img.size)输出结果
(500, 262)理解一下 BytesIO 和StringIO
很多时候数据读写不一定是文件也可以在内存中读写。
StringIO顾名思义就是在内存中读写str。 BytesIO 就是在内存中读写bytes类型的二进制数据
例子中如果使用StringIO 即f StringIO(response.text)会产生cannot identify image file的错误 当然上述例子也可以把图片存到本地之后再使用Image打开来获取图片大小
三.基本POST请求
1.传入data数据
对于 POST 请求来说我们一般需要为它增加一些参数。那么最基本的传参方法可以利用 data 这个参数。
import requestsformdata {type:AUTO,i:i love python,doctype:json,xmlVersion:1.8,keyfrom:fanyi.web,ue:UTF-8,action:FY_BY_ENTER,typoResult:true
}url http://fanyi.youdao.com/translate?smartresultdictsmartresultrulesmartresultugcsessionFromnullheaders{ User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36}response requests.post(url, data formdata, headers headers)print (-------------1-----------)
print (response.text)# 如果是json文件可以直接显示
print (-------------2----------)
print (response.json())运行结果
{type:EN2ZH_CN,errorCode:0,elapsedTime:3,translateResult:[[{src:i love python,tgt:我喜欢python}]],smartResult:{type:1,entries:[,肆文,,,高德纳,,]}}{type: EN2ZH_CN, errorCode: 0, elapsedTime: 3, translateResult: [[{src: i love python, tgt: 我喜欢python}]], smartResult: {type: 1, entries: [, 肆文, , , 高德纳, , ]}}四.代理proxies参数
如果需要使用代理你可以通过为任意请求方法提供 proxies 参数来配置单个请求
import requests# 根据协议类型选择不同的代理
proxies {http: http://12.34.56.79:9527,https: http://12.34.56.79:9527,
}response requests.get(http://www.baidu.com, proxies proxies)
print response.text也可以通过本地环境变量 HTTP_PROXY 和 HTTPS_PROXY 来配置代理
export HTTP_PROXYhttp://12.34.56.79:9527
export HTTPS_PROXYhttps://12.34.56.79:9527五.私密代理
import requests# 如果代理需要使用HTTP Basic Auth可以使用下面这种格式
proxy { http: mr_mao_hacker:sffqry9r61.158.163.130:16816 }response requests.get(http://www.baidu.com, proxies proxy)print (response.text)六.web客户端验证
如果是Web客户端验证需要添加 auth (账户名, 密码)
import requestsauth(test, 123456)response requests.get(http://192.168.199.107, auth auth)print (response.text)
七.Cookies 和 Sission
1.Cookies
如果一个响应中包含了cookie那么我们可以利用 cookies参数拿到
import requestsresponse requests.get(http://www.baidu.com/)# 7\. 返回CookieJar对象:
cookiejar response.cookies# 8\. 将CookieJar转为字典
cookiedict requests.utils.dict_from_cookiejar(cookiejar)print (cookiejar)print (cookiedict)运行结果
RequestsCookieJar[Cookie BDORZ27315 for .baidu.com/]{BDORZ: 27315}2.Session
在 requests 里session对象是一个非常常用的对象这个对象代表一次用户会话从客户端浏览器连接服务器开始到客户端浏览器与服务器断开。
会话能让我们在跨请求时候保持某些参数比如在同一个 Session 实例发出的所有请求之间保持 cookie 。
实现人人网登录
import requests# 1\. 创建session对象可以保存Cookie值
ssion requests.session()# 2\. 处理 headers
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36}# 3\. 需要登录的用户名和密码
data {email:mr_mao_hacker163.com, password:alarmchime} # 4\. 发送附带用户名和密码的请求并获取登录后的Cookie值保存在ssion里
ssion.post(http://www.renren.com/PLogin.do, data data)# 5\. ssion包含用户登录后的Cookie值可以直接访问那些登录后才可以访问的页面
response ssion.get(http://www.renren.com/410043129/profile)# 6\. 打印响应内容
print (response.text)八.处理HTTPS请求 SSL证书验证
Requests也可以为HTTPS请求验证SSL证书
要想检查某个主机的SSL证书你可以使用 verify 参数也可以不写
import requests
response requests.get(https://www.baidu.com/, verifyTrue)# 也可以省略不写
# response requests.get(https://www.baidu.com/)
print (r.text)运行结果
!DOCTYPE html
!--STATUS OK--html headmeta http-equivcontent-type
contenttext/html;charsetutf-8meta http-equivX-UA-Compatible
contentIEEdge百度一下你就知道 ....如果SSL证书验证不通过或者不信任服务器的安全证书则会报出SSLError