python爬蟲 定位和選擇網頁內容的幾種方式比較 正則表達式\libxml、bs4、lxml和xpath、css選擇器

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如果單純說編寫難度的話,前者更高,速度上前者略慢,但是準確性上前者更強。

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章