簡體   English   中英

在Python中哪個最好:urllib2,PycURL或機械化?

[英]Which is best in Python: urllib2, PycURL or mechanize?

好的,所以我需要使用Python下載一些網頁,並對我的選項進行了快速調查。

包含在Python中:

urllib-在我看來,我應該改用urllib2。 urllib不支持cookie,僅HTTP / FTP /本地文件(不支持SSL)

urllib2-完整的HTTP / FTP客戶端,支持大多數需要的東西,例如cookie,不支持所有HTTP動詞(僅GET和POST,不支持TRACE等)

全功能:

機械化 -可以使用/保存Firefox / IE cookie,采取類似跟隨第二個鏈接的操作,並積極維護(2011年3月發布0.2.5)

PycURL-支持curl的所有功能(FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP),壞消息:自2008年9月9日以來未更新(7.19.0)

新的可能性:

urllib3-支持連接重用/池化和文件發布

不推薦使用(也可以使用urllib / urllib2代替):

httplib-僅HTTP / HTTPS(無FTP)

httplib2-僅HTTP / HTTPS(無FTP)

讓我印象深刻的第一件事是urllib / urllib2 / PycURL / mechanize都是相當成熟的解決方案,可以很好地工作。 mechanize和PycURL附帶了許多Linux發行版(例如Fedora 13)和BSD,因此安裝通常不是問題(很好)。

urllib2看起來不錯,但我想知道為什么PycURL和機械化兩者似乎都很流行,是否缺少某些東西(即,如果使用urllib2,我是否會在某個時候畫一個角?)。 我真的很想就這些事情的利弊提供一些反饋,以便為自己做出最佳選擇。

編輯:在urllib2中添加了有關動詞支持的注釋

我認為這個演講(在pycon 2009上)可以為您尋找的答案提供答案(Asheesh Laroia在此問題上有很多經驗)。 他指出了您大多數清單中的優點和缺點

根據PYCON 2009時間表:

您是否發現自己面臨着需要提取數據的網站? 如果您可以通過編程方式將數據輸入到Web應用程序中,甚至那些經過調整以抵抗機器人交互的數據,您的生活會更簡單嗎?

我們將討論網絡抓取的基礎知識,然后深入探討不同方法的詳細信息以及最適用的方法。

您將了解何時應用不同的工具,並了解我在Electronic Frontier Foundation的一個項目中挑選的用於屏幕抓取的“重錘”。

參加者應盡可能攜帶一台筆記本電腦嘗試我們討論的示例並做筆記。

更新: Asheesh Laroia更新了他的pycon 2010演示文稿

  • PyCon 2010:Scrape the Web:不期望它的網站編程策略

     * My motto: "The website is the API." * Choosing a parser: BeautifulSoup, lxml, HTMLParse, and html5lib. * Extracting information, even in the face of bad HTML: Regular expressions, BeautifulSoup, SAX, and XPath. * Automatic template reverse-engineering tools. * Submitting to forms. * Playing with XML-RPC * DO NOT BECOME AN EVIL COMMENT SPAMMER. * Countermeasures, and circumventing them: o IP address limits o Hidden form fields o User-agent detection o JavaScript o CAPTCHAs * Plenty of full source code to working examples: o Submitting to forms for text-to-speech. o Downloading music from web stores. o Automating Firefox with Selenium RC to navigate a pure-JavaScript service. * Q&A; and workshopping * Use your power for good, not evil. 

更新2:

PyCon US 2012-Web抓取:可靠,有效地從不需要的頁面中提取數據

令人興奮的信息被困在網頁中和HTML表單的后面。 在本教程中,您將學習如何解析這些頁面以及何時應用使刮擦更快,更穩定的高級技術。 我們將介紹Twisted,gevent等並行下載。 分析SSL背后的網站; 用Selenium驅動JavaScript-y網站; >規避常見的防刮擦技術。

Python 請求也是HTTP內容的理想選擇。 它有一個更好的API IMHO,這是他們官方文檔中的一個http請求示例:

>>> r = requests.get('https://api.github.com', auth=('user', 'pass'))
>>> r.status_code
204
>>> r.headers['content-type']
'application/json'
>>> r.content
...
  • urllib2在隨處可見的每個Python安裝中都可以找到,因此它是一個良好的起點。
  • PycURL對於已經習慣使用libcurl的人們很有用,它公開了HTTP的更多低級細節,此外,它還獲得了應用於libcurl的任何修復或改進。
  • mechanize用於持久地驅動連接,就像瀏覽器一樣。

這不是一個比另一個更好的問題,而是選擇適合該工作的工具的問題。

要“獲取一些網頁”,請使用請求

http://docs.python-requests.org/en/latest/

Python的標准urllib2模塊提供了您需要的大多數HTTP功能,但是該API已被徹底破壞。 它是為不同的時間和不同的Web構建的。 要執行最簡單的任務,需要大量的工作(甚至覆蓋方法)。

事情不應該這樣。 不在Python中。

>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}

不用擔心“最新更新”。 在過去的幾年中,HTTP並沒有太大改變;)

urllib2是最好的(因為它是內置的),如果您需要Firefox的cookie,請切換為機械化。 機械化可以用作urllib2的替代品-它們具有類似的方法等。使用Firefox cookie意味着您可以使用個人登錄憑據從網站(例如StackOverflow)中獲取信息。 只需對您的請求數量負責(否則您將被阻止)。

PycURL適用於需要libcurl中所有低級內容的人。 我會先嘗試其他圖書館。

Urllib2僅支持HTTP GET和POST,可能有解決方法,但是如果您的應用程序依賴於其他HTTP動詞,則您可能會希望使用其他模塊。

看看Grab(http://grablib.org)。 它是一個提供兩個主要接口的網絡庫:1)用於創建網絡請求和解析檢索到的數據的Grab 2)用於創建批量站點抓取工具的Spider

在后台,Grab使用pycurl和lxml,但是可以使用其他網絡傳輸(例如,請求庫)。 請求傳輸尚未經過良好測試。

每個使用HTTP的python庫都有其自身的優勢。

使用具有特定任務所需最少功能的工具。

您的列表至少缺少urllib3-一個很酷的第三方HTTP庫,該庫可以重用HTTP連接,從而大大加快了從同一站點檢索多個URL的過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM