深刻使用过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
Windows平台: 使用Anaconda集成安装包,无脑解决函数
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