好友
阅读权限30
听众
最后登录1970-1-1
|
爬虫环境搭建完成后,可操作的东西太多了,太多的代码可以测试,大量好的代码可以借鉴。自笔记七开始,我感觉瓶颈突破了,笔记七开始有全新的起点。
简单的代码我们不但要模仿,学习,还要进行剖析,为自己所用。
我们还以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)
这样就返回了一个名为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
字符串方式的响应体:
定制请求头:
请求头Headers提供了关于请求、响应或其他发送实体的信息。对于爬虫而言,请求头十分重要,尽管在上一个示例中并没有制定请求头。如果没有指定请求头或请求的请求头和实际网页不一致,就可能无法返回正确的结果。
Requests并不会基于定制的请求头Headers的具体情况改变自己的行为,只是在最后的请求中,所有的请求头信息都会被传递进去。
那么,我们如何找到正确的Headers呢?
那么我们使用浏览器(百分浏览器或者Chrome浏览器)的“检查”命令,在浏览器中打开要请求的网页,右击网页的任意位置,在弹出的快捷菜单中单击“检查”命令。
在随后打开的页面中单击Network选项,按F5刷新,通常在最上面一个,和主页显示网址一致,然后我们在Headers中可以看到Requests
Headers的详细信息。
我们可以看到请求头的信息为:
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
提取请求头中重要的部分,可以把代码改为:
发送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)
输出结果如下:
可以看到,form变量的值为key_dict输入的值,这样一个POST请求就发送成功了。
以上所有代码,我均打印并测试成功,但很多代码为什么这样写,还没掌握透,继续学习。
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|