使用lxml代替beautifulsoup

深刻使用過lxml的都會深深地喜歡上它,雖然BeautifulSoup很流行,可是深刻了解lxml後,你就不再會使用bs了css

我以爲beautifulsoup很差用,速度也慢(雖然可使用lxml做爲解析器了).另外soup.find_all這種簡直就是手工時代的操做(不少人使用find find_all這幾個函數, 其實它們使用起來不是很愉快),手工操做的另外一個特徵是須要本身手寫正則表達式(正則是一個小範圍內的軍刀,大範圍用是不對的)html

多使用soup.select纔是正確的選擇, 多簡單方便.python

爬蟲對html頁面作的操做,大部分時候在選取東西,find_all還要本身手工去寫(好比手工寫正則表達式, it's a hell).正則表達式

使用XPath以及CSS選擇器纔是明智的選擇,這二者,瀏覽器均可以幫咱們自動生成,何樂不爲?segmentfault

另外,lxml用起來舒服多了,速度也不錯.瀏覽器

另外,lxml安裝是一個難題,常有不少錯誤,使人望而生畏,這裏提供兩種方法app

  1. Windows平臺: 使用Anaconda集成安裝包,無腦解決函數

  2. Ubuntu平臺: sudo apt-get install python-lxml無腦解決
    我從不以爲去本身解決lxml在這些平臺的安裝有什麼很大價值,反而容易使人自我懷疑.(寶貴的時間爲什麼要浪費在這種事情上面?)url

下面就來一個示例:code

#####################
#  獲取SF首頁的標題
#####################
from lxml.etree import HTML
import requests


url = 'https://segmentfault.com/'
css_selector = '.title>a'  #這是利用瀏覽器自動獲取的,我甚至都不用知道它是什麼意思

text = requests.get(url).text
page = HTML(text)

titles = []
for title in page.cssselect(css_selector):
    titles.append(title.text)
    
print titles

# 這一段程序寫下來,不用動腦筋(無腦寫),不消耗心智
利用瀏覽器獲取XPath/CSS選擇器的方法:
1. 推薦使用Firefox, 比Chrome強大太多
2. 右鍵元素-->copy XPath
相關文章
相關標籤/搜索