1. 首先摘抄一下之前的教程內容,確定一下這些概念之間的邏輯關係,如果看過就可以略去
A. 爬蟲定位網頁信息的步方法分爲兩種:匹配文本、建樹搜索;下面我們按照這兩類方 法,具體介紹一下各個工具:
- 兩類工具
- 第一類:匹配文本
- 匹配文本的意思是直接在文本內容上做匹配;
- 例子:正則表達式;正則表達式就是直接按照一個特定的規則去匹配文本,不需要對網頁的結構進行分析,只需要對需要定位的信息的上下文進行分析;
- 第二類:建樹搜索
- 建樹搜索的流程分爲兩步:第一步是建樹,也就是解析;第二步是搜索,搜索的方法是根據樹的結構,搜索想要的內容。
- 解析大體上有兩個方法:dom,sax;各個瀏覽器大多采用這兩個標準去自己實現一個方法,也有libxml,libxslt,python內置的解析庫等(對java不太熟悉,在網上查閱過程中,發現java有很多解析庫);
- 搜索的例子:在搜索上,我們有兩類方法,一類是xpath,一類是css選擇器;這兩個方法其實對應解析器的兩類作用對象:文本和樣式表;在chrome、firefox瀏覽器裏面可以直接選擇這兩類方法所對應的路徑;
- 最後我們經常使用的比較成熟的庫:lxml,bs4,xquery,xpoint:
- 第一類:匹配文本
B. 根據網頁類型的不同,我們再來確定我們使用的工具:
- 靜態網頁
- 我們獲取的信息由於是html或者css裏面的,我們直接通過匹配文本或者是建樹搜索都可以完成定位信息的功能;
- 但是注意上面提到的一種特殊情況
- 如果信息是在js代碼的內部一次性發送過來(注意這裏是一次性發送過來,不是異步發送),我們需要用匹配文本的方式去匹配;
- 如果這種情況下我們用了當時的渲染js代碼的方法,我們就也可以用建樹搜索了;
- 動態網頁
- 如果獲取網頁信息是用分析api的方法:我們從json數據中拿到信息;
- 如果我們的網頁信息是用js引擎渲染的方法,我們又有兩種處理方法:
- 第一種是我們用文本匹配、或者建樹搜索;
- 第二種是我們使用js引擎直接操作dom api,找出相應的內容;這種方法在上面介紹定位信息的工具的時候沒有講,適合js比較熟練的同學;
- 第三種是我們用模擬請求法獲取信息時,這個時候用文本匹配、或者建樹搜索都可以;
2. 然後對比一下這幾個的具體的關係
A. 正則表達式
由上面的概念可知,正則表達式是獨立的一個體系,使用文本匹配的方式,剩下的都是先建樹再搜索的一環;
優點是速度快,準確程度高;
缺點是可讀性差,不宜修改,編寫困難;
B. libxml、lxml、bs4
這些是用來解析網頁成爲樹的,並可以附加xpath、css選擇器來尋找文檔內容;
- libxml的特點是用編寫成的;
- 優點是速度快;
- 缺點是用C 寫爬蟲的人比較少;
- lxml的特點是在python中繼承了libxml:
- 優點是速度相對快,
- 缺點是xpath的表達式比較複雜,當然lxml也支持選擇器,這個可能也就不是個缺點了;
- bs4
- 優點是:bs4支持多種解析器,其中包括lxml,也方便配合css選擇器;
- 缺點是:性能上和lxml有一定的差距;
C. xpath,css選擇器
這兩個內容是用來選擇樹中的內容的,個人覺得xpath和css如果單純說編寫難度的話,前者更高,速度上前者略慢,但是準確性上前者更強。