2014-01-08 46 views
9

我正在嘗試使用請求模塊來編寫簡單的網絡爬蟲程序,並且我想知道如何禁用它的-default- keep-alive feauture。Python-請求(> = 1. *):如何禁用保持活動狀態?

我試着使用:

s = requests.session() 
s.config['keep_alive'] = False 

不過,我得到一個錯誤,指出會話對象有沒有屬性「配置」,我認爲這是與新版本改變了,但我似乎無法找到如何在官方文檔中進行。

事實是,當我在特定網站上運行爬蟲程序時,它最多隻能獲得五頁,然後無限循環,因此我認爲這與保持活躍功能有關!

PS:is爲Web爬蟲請求一個好的模塊?有更適應的東西嗎?

謝謝!

+1

這是[changed 1.x](http://docs.python-requests.org/en/latest/api/#migrating-to-1-x) – Elrond

回答

14

這工作

s = requests.session() 
s.keep_alive = False 

Answered in the comments of a similar question.

+1

只要一個網絡爬蟲推薦 - 不應該用於基於意見的問題和答案。如果您有興趣與網頁和網頁內容互動,我會建議您做一些關於scrapy和beautifulsoup等軟件包的研究。 – nfazzio

+0

至少在當前請求版本上不起作用 - 請求將發送保持活動頭 – MacHala

3

我不確定,但是您可以嘗試在使用請求發送GET請求時將{「Connection」:「close」}作爲HTTP標頭傳遞。這將在服務器返回響應後立即關閉連接。

>>> headers = {"Connection": "close"} 
>>> r = requests.get('https://example.xcom', headers=headers) 
+0

我試過這個,但aren'你應該使用POST請求嗎?無論如何,問題仍然存在! – Acemad

1

由於@praveen認爲它是從我們的預計使用HTTP/1.1Connection: close通知連接應響應結束後關閉服務器。

這裏是它是如何在RFC 2616描述:

HTTP/1.1定義了發送者的信號,所述連接將所述響應完成後關閉的「關閉」連接選項。例如,

Connection: close 

在任一方請求或響應的報頭字段指示連接不應被視爲`持久」當前請求後(第8.1節)/響應完成。

不支持持久連接的HTTP/1.1應用程序必須在每條消息中包含「關閉」連接選項。

相關問題