Request
Requests 唯一的一個非轉基因的 Python HTTP 庫,人類可以安全享用
上面一句話 出自Requests官方文檔的第一句,從而奠定了其逗逼的文檔風格。類似的還有:
警告:非專業使用其他 HTTP 庫會導致危險的副作用,包括:安全缺陷症、冗余代碼症、重新發明輪子症、啃文檔症、抑郁、頭疼、甚至死亡。
Request是一個基於urllib3的Python的Http庫。這里就可以看出它的存在是為了取代urllib、urllib2等Http工具的江湖地位的,事實上確實如此,相對於前兩者來說它是更高級的工具。比如urllib和urllib2配合使用的時候我們需要手動地用urlencode為POST表單數據編碼或者手動為GET方式添加url的查詢字符串,使用requests就不需要考慮這種問題。還有keep-alive和Http連接池的功能都是全自動化的。
它的官方文檔簡單明了,在這里可以找到
Beautiful Soup
當我學習用正則表達式抓取網頁內容的時候,就在想這種對着每個頁面反反復復的盯着看,都要長雞眼了,就是為了寫一個正則表達式,是不是效率太低也太容易出錯了。Beautiful Soup這種工具很明顯就是為了解決我的這種疑惑的。
它是一個用於從HTML和XML文檔中提取數據的Python庫,可以實現文檔的導航、查找、修改,讓我們從繁瑣、低效、易錯的正則表達式中解脫出來。它把HTML這種基於標簽的文檔組織成樹的結構,方便我們用面向對象的方式獲取內容。目前最新的是beautifulsoup4。
我的系統是Ubuntu16.04,安裝Beautiful Soup:
sudo pip install beautifulsoup4
Beautiful Soup有中文版的文檔,在這里
Beautiful Soup是一個獲取文檔內容的高層的封裝,它是支持多種解析器的,默認的是Python標准庫中的HTMLParser。第三方解析器支持lxml和html5lib,不同的解析器有各自的特點,官方文檔中做出了對比的表格。在用html文檔構造beautifulsoup對象的時候,可以指定解析器來解析文檔:
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("index.html"), "html.parser")
如果不指定而系統中又有多種解析器的話,系統會選擇最合適的解析器來解析文檔。
BeautifulSoup把HTML的每個節點都轉換成Python對象,這些對象分為Tag , NavigableString , BeautifulSoup , Comment四個種類。
Tag:也就是xml或者HTML中的標簽
NavigableString:稱為“可以遍歷的字符串”
Beautiful
測試網站:http://httpbin.org/
這是一個專門用於測試Http請求和相應的網站。在學習各種工具和方法的時候做實驗嘗試和驗證是必不可少的環節,這種時候這個網站就排上了用場。它支持各種HTTP的場景,請求的響應內容都是以json編碼的。例如:
$ curl http://httpbin.org/ip
{"origin": "24.127.96.129"}
事實上,Requests的官網就是是它來講解的例子。