鱼C论坛

 找回密码
 立即注册
查看: 1894|回复: 3

[技术交流] python扩展库——requestsrequests

[复制链接]
发表于 2020-3-26 14:36:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 溪水叮咚 于 2020-3-26 14:53 编辑

python的requestsrequests库在编写爬虫的时候十分有用,几乎是其他工具包难以替代的用它自己的话说,requests就是http for humans
我们来学习一下requests的基本功能
不只是requests库,也包括关于网页的基础知识

URL
Uniform Resoure Locator中文含义“统一资源定位符”


url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

URL的结构

基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径?查询”。完整的、带有授权部分的普通统一资源标志符语法看上去如下:协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志。

HTTP状态码
HTTP Status Code


当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server
header)用以响应浏览器的请求。

get请求和post请求
首先区分另种方法
GET:从指定的资源请求数据。
POST:向指定的资源提交要被处理的数据

粗浅的理解,一个主动一个被动

除此之外两者还有一些独有的特性
GET 请求可被缓存
GET 请求保留在浏览器历史记录中
GET 请求可被收藏为书签
GET 请求不应在处理敏感数据时使用
GET 请求有长度限制
GET 请求只应当用于取回数据


POST 请求不会被缓存
POST 请求不会保留在浏览器历史记录中
POST 不能被收藏为书签
POST 请求对数据长度没有要求

我们用网站网址测试一下

import requests


r=requests.get('https://fishc.com.cn/')
print(r.text)----------(1)
print(r.content)-------------(2)
结果会是
(1):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">


<head>


<meta http-equiv="Content-Type" content="text/html; charset=gbk" />


<title>鱼C工作室-免费编程视频教学|Python教学|Web开发教学|全栈开发教学|C语言教学|汇编教学|Win32开发|加密与解密|Linux教学 -  Powered by Discuz!</title>






<script type="text/javascript">
        (function(){
            _fmOpt = {
                partner: 'fishc',
                appName: 'fishc_web',
                token: 'fishc-1585203319-8650651396431810',
                fmb: false,
                        getinfo: function(){
                                return 'e3Y6ICIyLjUuMCIsIG9zOiAid2ViIiwgczogMTk5LCBlOiAianMgbm90IGRvd25sb2FkIn0=';
                        },
            };
            var cimg = new Image(1,1);
            cimg.onload = function() {
                _fmOpt.imgLoaded = true;
            };
            _fmOpt.flashSwitch=false;
            cimg.src = "https://fp.fraudmetrix.cn/fp/clear.png?partnerCode=fishc&appName=fishc_web&tokenId=" + _fmOpt.token;
            var fm = document.createElement('script'); fm.type = 'text/javascript'; fm.async = true;
            fm.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'static.fraudmetrix.cn/v2/fm.js?ver=0.1&t=' + (new Date().getTime()/3600000).toFixed(0);
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(fm, s);
        })();
        </script>


<meta name="keywords" content="鱼C工作室|免费编程视频教学|Python教学|Web开发教学|全栈开发教学|C语言教学|汇编教学|Win32开发|加密与解密|Linux教学" />


<meta name="description" content="鱼C工作室为大家提供最有趣的编程视频教学。 " />


<meta name="generator" content="Discuz! X3.4" />


<meta name="author" content="Discuz! Team and Comsenz UI Team" />


<meta name="copyright" content="2001-2017 Comsenz Inc." />


<meta name="MSSmartTagsPreventParsing" content="True" />


<meta http-equiv="MSThemeCompatible" content="Yes" />


<base href="https://fishc.com.cn/" /><link rel="stylesheet" type="text/css" href="data/cache/style_1_common.css?Xo7" /><link rel="stylesheet" type="text/css" href="data/cache/style_1_forum_index.css?Xo7" /><link rel="stylesheet" id="css_extstyle" type="text/css" href="./template/default/style/t2/style.css" /><script type="text/javascript">var STYLEID = '1', STATICURL = 'static/', IMGDIR = 'static/image/common', VERHASH = 'Xo7', charset = 'gbk', discuz_uid = '0', cookiepre = 'oMVX_2132_', cookiedomain = '', cookiepath = '/', showusercard = '1', attackevasive = '0', disallowfloat = 'login|newthread', creditnotice = '1|荣誉|,2|鱼币|,3|贡献|,5|技术值|,6|C币|', defaultstyle = './template/default/style/t2', REPORTURL = 'aHR0cHM6Ly9maXNoYy5jb20uY24vZm9ydW0ucGhw', SITEURL = 'https://fishc.com.cn/', JSPATH = 'data/cache/', CSSPATH = 'data/cache/style_', DYNAMICURL = '';</script>


<script src="data/cache/common.js?Xo7" type="text/javascript"></script>


<meta name="application-name" content="鱼C论坛" />


<meta name="msapplication-tooltip" content="鱼C论坛" />


<meta name="msapplication-task" content="name=论坛;action-uri=https://fishc.com.cn/forum.php;icon-uri=https://fishc.com.cn/static/image/common/bbs.ico" />


<meta name="msapplication-task" content="name=空间;action-uri=https://fishc.com.cn/home.php;icon-uri=https://fishc.com.cn/static/image/common/home.ico" /><link rel="archives" title="鱼C论坛" href="https://fishc.com.cn/archiver/" />…………

emmmmm~太长了,不复制了~~
(2):
b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r\n<html xmlns="http://www.w3.org/1999/xhtml">\r\n<head>\r\n<meta http-equiv="Content-Type" content="text/html; charset=gbk" />\r\n<title>\xd3\xe3C\xb9\xa4\xd7\xf7\xca\xd2-\xc3\xe2\xb7\xd1\xb1\xe0\xb3\xcc\xca\xd3\xc6\xb5\xbd\xcc\xd1\xa7|Python\xbd\xcc\xd1\xa7|Web\xbf\xaa\xb7\xa2\xbd\xcc\xd1\xa7|\xc8\xab\xd5\xbb\xbf\xaa\xb7\xa2\xbd\xcc\xd1\xa7|C\xd3\xef\xd1\xd4\xbd\xcc\xd1\xa7|\xbb\xe3\xb1\xe0\xbd\xcc\xd1\xa7|Win32\xbf\xaa\xb7\xa2|\xbc\xd3\xc3\xdc\xd3\xeb\xbd\xe2\xc3\xdc|Linux\xbd\xcc\xd1\xa7 -  Powered by Discuz!</title>\r\n\r\n<script type="text/javascript">\n\t(function(){\n\t    _fmOpt = {\n\t        partner: \'fishc\',\n\t        appName: \'fishc_web\',\n\t        token: \'fishc-1585203319-8650651396431810\',\n\t        fmb: false,\n\t\t\tgetinfo: function(){\n\t\t\t\treturn \'e3Y6ICIyLjUuMCIsIG9zOiAid2ViIiwgczogMTk5LCBlOiAianMgbm90IGRvd25sb2FkIn0=\';\n\t\t\t},\n\t    };\n\t    var cimg = new Image(1,1);\n\t    cimg.onload = function() {\n\t        _fmOpt.imgLoaded = true;\n\t    };\n\t    _fmOpt.flashSwitch=false;\n\t    cimg.src = "https://fp.fraudmetrix.cn/fp/clear.png?partnerCode=fishc&appName=fishc_web&tokenId=" + _fmOpt.token;\n\t    var fm = document.createElement(\'script\'); fm.type = \'text/javascript\'; fm.async = true;\n\t    fm.src = (\'https:\' == document.location.protocol ? \'https://\' : \'http://\') + \'static.fraudmetrix.cn/v2/fm.js?ver=0.1&t=\' + (new Date().getTime()/3600000).toFixed(0);\n\t    var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(fm, s);\n\t})();\n\t</script>\r\n<meta name="keywords" content="\xd3\xe3C\xb9\xa4\xd7\xf7\xca\xd2|\xc3\xe2\xb7\xd1\xb1\xe0\xb3\xcc\xca\xd3\xc6\xb5\xbd\xcc\xd1\xa7|Python\xbd\xcc\xd1\xa7|Web\xbf\xaa\xb7\xa2\xbd\xcc\xd1\xa7|\xc8\xab\xd5\xbb\xbf\xaa\xb7\xa2\xbd\xcc\xd1\xa7|C\xd3\xef\xd1\xd4\xbd\xcc\xd1\xa7|\xbb\xe3\xb1\xe0\xbd\xcc\xd1\xa7|Win32\xbf\xaa\xb7\xa2|\xbc\xd3\xc3\xdc\xd3\xeb\xbd\xe2\xc3\xdc|Linux\xbd\xcc\xd1\xa7" />\r\n<meta name="description" content="\xd3\xe3C\xb9\xa4\xd7\xf7\xca\xd2\xce\xaa\xb4\xf3\xbc\xd2\xcc\xe1\xb9\xa9\xd7\xee\xd3\xd0\xc8\xa4\xb5\xc4\xb1\xe0\xb3\xcc\xca\xd3\xc6\xb5\xbd\xcc\xd1\xa7\xa1\xa3 " />\r\n<meta name="generator" content="Discuz! X3.4" />\r\n<meta name="author" content="Discuz! Team and Comsenz UI Team" />\r\n<meta name="copyright" content="2001-2017 Comsenz Inc." />\r\n<meta name="MSSmartTagsPreventParsing" content="True" />\r\n<meta http-equiv="MSThemeCompatible" content="Yes" />\r\n<base href="https://fishc.com.cn/" /><link rel="stylesheet" type="text/css" href="data/cache/style_1_common.css?Xo7" /><link rel="stylesheet" type="text/css" href="data/cache/style_1_forum_index.css?Xo7" /><link rel="stylesheet" id="css_extstyle" type="text/css" href="./template/default/style/t2/style.css" />…………
当然,后边还有很多,就不展示了
可以看出,除了一些中文字符的表示不一样外,两者基本相同

但如果是图片

import requests


r=requests.get('https://images.gitbook.cn/FnBu1-7dMqYS5T1GQ3UJOodTK_E-')
print(r.text)
print(r.content)
输出结果就不同了
前者几乎全部是乱码,因为图片以字符串形式输出会导致格式很乱
后者是二进制格式,除了源代码,图片部分是各种转义字符

如果我们存储这张照片

with open('text.gif', 'w') as f:
    f.write(r.text)
with open('content.gif','wb') as f:
    f.write(r.content)
然而,content.gif可以打开,而text.git却打不开

划重点,总是保存在客户端中,用来辨别用户身份
我们来试一下

import requests


r=requests.get('https://fishc.com.cn/')
print(r.cookies)


for key, value in r.cookies.items():
    print(key,'=',value)
接下来就会显示结果,我这里就不挂了

代理设置
这个就好理解了,防止一个ip访问次数过多被屏蔽


import requests


proxies = {
    "http": "http://10.10.1.10:3128",
    "https": "http://10.10.1.10:1080",
}
resp = requests.get('https://blog.csdn.net/', proxies=proxies)
print(resp.status_code)




欢迎大家在评论区留言


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 14:38:17 | 显示全部楼层
标题写错了,大家注意一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 14:39:34 | 显示全部楼层
溪水叮咚 发表于 2020-3-26 14:38
标题写错了,大家注意一下!

可以编辑帖子的。。。
还有,建议发到Python板块里,不要发到资源分享里面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-26 14:50:25 | 显示全部楼层
qiuyouzhi 发表于 2020-3-26 14:39
可以编辑帖子的。。。
还有,建议发到Python板块里,不要发到资源分享里面

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 10:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表