且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Requests:为人类设计的HTTP库

更新时间:2022-08-12 11:23:48

1、官方文档:Requests: HTTP for Humans 。(秒杀urllib、urllib2、httplib。。。)

1.1、请求主要参数说明:requests.request(method, url, **kwargs)

2、官方下载地址:https://pypi.python.org/pypi/requests

3、安装方法:

1
python setup.py install

4、一个有用的特性:持久保持cookie。(参考这里

5、添加cookie:(可以参阅这篇文章

1
requests.utils.add_dict_to_cookiejar(cj, cookie_dict)

5.1、如果sn.headers['Cookie']有值,那么sn.cookies 不再起作用。

6、用python爬虫抓站的一些技巧总结,注意(3.5 终极绝招)中提到的工具:selenium,pamie,watir。

7、Python的扩展包requests的高级用法,应该是这两个页面的组合翻译:

8、关于默认超时值:socket.getdefaulttimeout() requests 库 使用过程中timeout值最大可设值? 

9、Requests在get时url中的百分号(%)被强制编码为 25% 可用如下方法迂回解决。(参考评论

1
2
3
4
5
6
7
import requests
sn = requests.Session()
url = 'http://xxx.net/xxx.aspx?Param=ASP.brief_result_aspx%23/%u5E74
req = requests.Request('GET', url)
prepped = sn.prepare_request(req)
prepped.url = prepped.url.replace('%25''%')
= sn.send(prepped)

或者拆分后重新拼接:

1
2
3
4
import requests
from urllib import parse
url = 'http://xxx.net/xxx.aspx?' + parse.urlencode(dict(parse.parse_qsl(parse.urlparse(url).query)))
= sn.get(url)

10、post表单重复键值的处理:

1
2
3
4
5
dic = {
        'key1': ['aaa''bbb''ccc'],
        'key2''xxx',
    }
= requests.post(url, data=dic)

这样会被编码成:key1=aaa&key1=bbb&key1=ccc&key2=xxx

11、用Requests实现聊天的小黄鸡和小黑鸡。(参考这篇文章

(1)、源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#coding=utf-8
import requests
                                                                                                                     
class SimSimi:
    def __init__(self):
        self.session = requests.Session()
                                                                                                                         
    def initCookie(self):
            headers = {
                'x-requested-with''XMLHttpRequest',
                'Accept-Language''zh-cn',
                'Referer''http://www.simsimi.com/talk.htm',
                'Accept''application/json, text/javascript, */*; q=0.01',
                'Content-Type''application/json; charset=utf-8',
                'Accept-Encoding''gzip, deflate',
                'User-Agent''Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)',
                'Host''www.simsimi.com',
                'Connection''Keep-Alive',
                #Cookie是否设置似乎没有关系
                #'Cookie': '',
            }
            self.session.headers.update(headers)
            self.session.get('http://www.simsimi.com/talk.htm')
            self.session.get('http://www.simsimi.com/talk.htm?lc=ch')
            self.session.headers.update({'Referer''http://www.simsimi.com/talk.htm?lc=ch'})
                                                                                                                         
    def getAnswer(self, message="hello"):
        url = 'http://www.simsimi.com/func/req?msg=%s&lc=ch'
        = self.session.get(url=url%message)
        if len(r.json()) < 1:
            return ("hehe...")
        else:
            return r.json()['response']
simi = SimSimi()
simi.initCookie()
msg = u'花果山'
print(u'topic: ' + msg)
for in range(15):
    msg = simi.getAnswer(msg)
    print i,
    if % 2 == 0:
        print u"小黄鸡:",
    else:
        print u"小黑鸡:",
    try:
        print(msg)
    except:
        print('哈哈')

(2)、效果

1
2
3
4
5
topic: 花果山
1 小黑鸡: 我也没去过 听说那是个传说 也许在他们心中吧
2 小黄鸡: 去过啊。很美的。
3 小黑鸡: 别难过哈~开心点~努力!让自己更优秀!让爱你的人自豪!
4 小黄鸡: 没关系。开心点。


相关阅读:

1、用Python测试网站用户名和密码的正确性

2、Python3 urllib.parse 常用函数示例


*** walker * Updated 2017-01-13 ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1228225如需转载请自行联系原作者


RQSLT