3、安裝方法:
<code>python setup.py </code><code>install</code>
<code>requests.utils.add_dict_to_cookiejar(cj, cookie_dict)</code>
5.1、如果sn.headers['Cookie']有值,那麼sn.cookies 不再起作用。
<code>import</code> <code>requests</code>
<code>sn </code><code>=</code> <code>requests.Session()</code>
<code>url </code><code>=</code> <code>'http:</code><code>/</code><code>/</code><code>xxx.net</code><code>/</code><code>xxx.aspx?Param</code><code>=</code><code>ASP.brief_result_aspx</code><code>%</code><code>23</code><code>/</code><code>%</code><code>u5E74</code>
<code>req </code><code>=</code> <code>requests.Request(</code><code>'GET'</code><code>, url)</code>
<code>prepped </code><code>=</code> <code>sn.prepare_request(req)</code>
<code>prepped.url </code><code>=</code> <code>prepped.url.replace(</code><code>'%25'</code><code>, </code><code>'%'</code><code>)</code>
<code>r </code><code>=</code> <code>sn.send(prepped)</code>
或者拆分後重新拼接:
<code>from</code> <code>urllib </code><code>import</code> <code>parse</code>
<code>url </code><code>=</code> <code>'http://xxx.net/xxx.aspx?'</code> <code>+</code> <code>parse.urlencode(</code><code>dict</code><code>(parse.parse_qsl(parse.urlparse(url).query)))</code>
<code>r </code><code>=</code> <code>sn.get(url)</code>
10、post表單重複鍵值的處理:
<code>dic </code><code>=</code> <code>{</code>
<code> </code><code>'key1'</code><code>: [</code><code>'aaa'</code><code>, </code><code>'bbb'</code><code>, </code><code>'ccc'</code><code>],</code>
<code> </code><code>'key2'</code><code>: </code><code>'xxx'</code><code>,</code>
<code> </code><code>}</code>
<code>r </code><code>=</code> <code>requests.post(url, data</code><code>=</code><code>dic)</code>
這樣會被編碼成:key1=aaa&key1=bbb&key1=ccc&key2=xxx
(1)、源碼
<code>#coding=utf-8</code>
<code> </code>
<code>class</code> <code>SimSimi:</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>):</code>
<code> </code><code>self</code><code>.session </code><code>=</code> <code>requests.Session()</code>
<code> </code>
<code> </code><code>def</code> <code>initCookie(</code><code>self</code><code>):</code>
<code> </code><code>headers </code><code>=</code> <code>{</code>
<code> </code><code>'x-requested-with'</code><code>: </code><code>'XMLHttpRequest'</code><code>,</code>
<code> </code><code>'Accept-Language'</code><code>: </code><code>'zh-cn'</code><code>,</code>
<code> </code><code>'Referer'</code><code>: </code><code>'http://www.simsimi.com/talk.htm'</code><code>,</code>
<code> </code><code>'Accept'</code><code>: </code><code>'application/json, text/javascript, */*; q=0.01'</code><code>,</code>
<code> </code><code>'Content-Type'</code><code>: </code><code>'application/json; charset=utf-8'</code><code>,</code>
<code> </code><code>'Accept-Encoding'</code><code>: </code><code>'gzip, deflate'</code><code>,</code>
<code> </code><code>'User-Agent'</code><code>: </code><code>'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)'</code><code>,</code>
<code> </code><code>'Host'</code><code>: </code><code>'www.simsimi.com'</code><code>,</code>
<code> </code><code>'Connection'</code><code>: </code><code>'Keep-Alive'</code><code>,</code>
<code> </code><code>#Cookie是否設定似乎沒有關系</code>
<code> </code><code>#'Cookie': '',</code>
<code> </code><code>}</code>
<code> </code><code>self</code><code>.session.headers.update(headers)</code>
<code> </code><code>self</code><code>.session.get(</code><code>'http://www.simsimi.com/talk.htm'</code><code>)</code>
<code> </code><code>self</code><code>.session.get(</code><code>'http://www.simsimi.com/talk.htm?lc=ch'</code><code>)</code>
<code> </code><code>self</code><code>.session.headers.update({</code><code>'Referer'</code><code>: </code><code>'http://www.simsimi.com/talk.htm?lc=ch'</code><code>})</code>
<code> </code><code>def</code> <code>getAnswer(</code><code>self</code><code>, message</code><code>=</code><code>"hello"</code><code>):</code>
<code> </code><code>url </code><code>=</code> <code>'http://www.simsimi.com/func/req?msg=%s&lc=ch'</code>
<code> </code><code>r </code><code>=</code> <code>self</code><code>.session.get(url</code><code>=</code><code>url</code><code>%</code><code>message)</code>
<code> </code><code>if</code> <code>len</code><code>(r.json()) < </code><code>1</code><code>:</code>
<code> </code><code>return</code> <code>(</code><code>"hehe..."</code><code>)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>return</code> <code>r.json()[</code><code>'response'</code><code>]</code>
<code>simi </code><code>=</code> <code>SimSimi()</code>
<code>simi.initCookie()</code>
<code>msg </code><code>=</code> <code>u</code><code>'花果山'</code>
<code>print</code><code>(u</code><code>'topic: '</code> <code>+</code> <code>msg)</code>
<code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>, </code><code>5</code><code>):</code>
<code> </code><code>msg </code><code>=</code> <code>simi.getAnswer(msg)</code>
<code> </code><code>print</code> <code>i,</code>
<code> </code><code>if</code> <code>i </code><code>%</code> <code>2</code> <code>=</code><code>=</code> <code>0</code><code>:</code>
<code> </code><code>print</code> <code>u</code><code>"小黃雞:"</code><code>,</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>print</code> <code>u</code><code>"小黑雞:"</code><code>,</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>print</code><code>(msg)</code>
<code> </code><code>except</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>'哈哈'</code><code>)</code>
(2)、效果
<code>topic: 花果山</code>
<code>1 小黑雞: 我也沒去過 聽說那是個傳說 也許在他們心中吧</code>
<code>2 小黃雞: 去過啊。很美的。</code>
<code>3 小黑雞: 别難過哈~開心點~努力!讓自己更優秀!讓愛你的人自豪!</code>
<code>4 小黃雞: 沒關系。開心點。</code>
相關閱讀:
本文轉自walker snapshot部落格51CTO部落格,原文連結http://blog.51cto.com/walkerqt/1228225如需轉載請自行聯系原作者
RQSLT