深入使用過lxml的都會深深地喜歡上它,雖然BeautifulSoup很流行,但是深入了解lxml后,你就再也不會使用bs了
我覺得beautifulsoup不好用,速度也慢(雖然可以使用lxml作為解析器了).另外soup.find_all
這種簡直就是手工時代
的操作(很多人使用find
find_all
這幾個函數, 其實它們使用起來不是很愉快),手工操作的另一個特征是需要自己手寫正則表達式(正則是一個小范圍內的軍刀,大范圍用是不對的)
多使用soup.select
才是正確的選擇, 多簡單方便.
爬蟲對html頁面做的操作,大部分時候在選取東西,find_all
還要自己手工去寫(比如手工寫正則表達式, it's a hell).
使用XPath
以及CSS選擇器
才是明智的選擇,這兩者,瀏覽器都可以幫我們自動生成,何樂不為?
另外,lxml
用起來舒服多了,速度也不錯.
另外,lxml安裝是一個難題,常有很多錯誤,令人望而生畏,這里提供兩種方法
Windows平臺: 使用Anaconda集成安裝包,無腦解決
Ubuntu平臺:
sudo apt-get install python-lxml
無腦解決
我從不覺得去自己解決lxml在這些平臺的安裝有什么很大價值,反而容易令人自我懷疑.(寶貴的時間為何要浪費在這種事情上面?)
下面就來一個示例:
#####################
# 獲取SF首頁的標題
#####################
from lxml.etree import HTML
import requestsurl = '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