吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2556|回复: 9
收起左侧

[学习记录] Python自学笔记(九)----------尝试定制请求头

[复制链接]
l2430478 发表于 2021-1-11 19:11
爬虫环境搭建完成后,可操作的东西太多了,太多的代码可以测试,大量好的代码可以借鉴。自笔记七开始,我感觉瓶颈突破了,笔记七开始有全新的起点。
简单的代码我们不但要模仿,学习,还要进行剖析,为自己所用。
我们还以http://www.santostang.com/ 为例进行学习。
在Requests中,最常用的功能是获取某个网页的内容,现在我们使用Requests获取个人博客主页的内容。
我们尝试使用如下代码:
[Python] 纯文本查看 复制代码
import requests
r = requests.get('http://www.santostang.com/')
print ("文本编码:" , r.encoding)
print ("响应状态码:" , r.status_code)
print ("字符串方式的响应体:" , r.text)



快照6.jpg
这样就返回了一个名为r的response响应对象,其存储了服务器响应的内容,我们可以从中获取需要的信息。
上例的说明如下:
    (1) r.text是服务器响应的内容,会自动根据响应头部的字符编码进行解码。
    (2) r.encoding是服务器内容使用的文本编码。
    (3) r.status_code用于检测响应的状态码,如果返回200,就表示请求成功了;如果返回的是4xx,就表示客户端错误;返回5xx则表示服务器错误响应。我们可以用r.status_code来检测请求是否正确响应。
    (4) r.content是字节方式的响应体,会自动解码gzip和deflate编码的响应数据。
    (5) r.json()是Requests中内置的JSON解码器。
    我们使用Requests库获取了网页数据,但是有些网页需要对Requests的参数进行设置才能获取需要的数据,这包括传递URL参数、定制请求头、发送POST请求、设置超时等。
传递URL参数:
    为了请求特定的数据,我们需要在URL的查询字符串中加入某些数据。如果你是自己构建URL,那么数据一般会跟在一个问号后面,并且以键/值的形式放在URL中,如http://httpbin.org/get?key1=value。   
    在Requests中,你可以直接把这些参数保存在字典中,用params构建至URL中。例如,传递keyl = value 和key2=value2到http://httpbin.org/get,可以这样编写:
[Python] 纯文本查看 复制代码
import requests
key_dict = {'key1': 'value1', 'key2' : 'value2' }
r = requests.get('http://httpbin.org/get', params = key_dict)
print ("URL已经正确编码:", r.url)
print ("字符串方式的响应体: \n", r.text)

通过上述代码的输出结果可以发现URL已经正确编码:
URL己经正确编码:http://httpbin.org/get?key1=value1&key2=value2
字符串方式的响应体:
快照7.jpg
定制请求头:
    请求头Headers提供了关于请求、响应或其他发送实体的信息。对于爬虫而言,请求头十分重要,尽管在上一个示例中并没有制定请求头。如果没有指定请求头或请求的请求头和实际网页不一致,就可能无法返回正确的结果。
    Requests并不会基于定制的请求头Headers的具体情况改变自己的行为,只是在最后的请求中,所有的请求头信息都会被传递进去。
    那么,我们如何找到正确的Headers呢?
   那么我们使用浏览器(百分浏览器或者Chrome浏览器)的“检查”命令,在浏览器中打开要请求的网页,右击网页的任意位置,在弹出的快捷菜单中单击“检查”命令。
    在随后打开的页面中单击Network选项,按F5刷新,通常在最上面一个,和主页显示网址一致,然后我们在Headers中可以看到Requests
Headers的详细信息。
快照8.jpg
我们可以看到请求头的信息为:
    GET/HTTP/ l.1
    Host: www.santostang.com
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1:WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36
    Accept:
text/html,application/xhtml+xml,application/xm1;q 0.9,image/webp,*/*;q=0.8  Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2
    提取请求头中重要的部分,可以把代码改为:
快照9.jpg
发送POST请求:
    除了GET请求外,有时还需要发送一些编码为表单形式的数据,如在登录的时候请求就为POST,因为如果用GET请求,密码就会显示在URL中,这是非常不安全的。如果要实现POST请求,只需要简单地传递一个字典给Requests中的data参数,这个数据字典就会在发出请求的时候自动编码为表单形式。
[Python] 纯文本查看 复制代码
import requests
key_dict = {'key1': 'value1', 'key2' : 'value2' }
r = requests.post('http://httpbin.org/post',data= key_dict)
print (r.text)

输出结果如下:
快照10.jpg
可以看到,form变量的值为key_dict输入的值,这样一个POST请求就发送成功了。

以上所有代码,我均打印并测试成功,但很多代码为什么这样写,还没掌握透,继续学习。





免费评分

参与人数 5吾爱币 +3 热心值 +5 收起 理由
家驹 + 2 + 1 老哥,求传家宝。玩的是哪个传世,能给个网址么?这个传家宝好用不?谢谢
mzq123000 + 1 + 1 上周就看到6-8的教程,这周就没动静了
图山Y + 1 热心回复!
hsanren + 1 谢谢@Thanks!
LP582998441 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

emir 发表于 2021-1-11 19:24
你这个学的快啊都到了爬虫了
VIP007 发表于 2021-1-11 20:00
wuboxun 发表于 2021-1-11 20:06
xpmg 发表于 2021-1-11 20:12
谢谢楼主分享经验
czwuyang 发表于 2021-1-12 08:19
不愧是大家学习的榜样
想飞的企鹅 发表于 2021-1-13 08:24
楼主真厉害,跟不上节奏
家驹 发表于 2021-1-13 18:04
老哥,求传家宝。玩的是哪个传世,能给个网址么?这个传家宝好用不?谢谢
cyls 发表于 2021-1-13 21:14
谢谢楼主分享这么好的学习经验,有空时试试
鸭子咯咯哒~ 发表于 2021-5-4 15:33
请求头不能全部都添加上吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-2 18:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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