python之屏幕抓取


Tidy 和 HTML 解析

Beautiful Soup

 

  屏幕抓取:是通過程序下載網頁並從中提取信息的過程。

  簡單來見:下載數據並對其進行分析

  思路:可使用urllib來獲取網頁的HTML代碼,再使用正則表達式從中提取信息。

  例如:假設要從python Job Board(http://python.org/jobs)提取招聘單位的名稱和網站。

  通過查看該網站的源代碼,可發現類似於下面的鏈接中找到名稱和URL:

<a href="/jobs/1970/">Python Engineer</a>

  如下:簡單的屏幕抓取程序

from urllib.request import urlopen
import re
p = re.compile('<a href="(/jobs/\\d+)/">(.*?)</a>')
text = urlopen('http://python.org/jobs').read().decode()
for url,name in p.findall(text):
    print('{}({})'.format(name,url))

  以上代碼需要跟進的地方:

  1.正則表達式一點都不容易理解。如果HTML代碼和查詢更復雜,那正則表達式就難以理解和維護

  2.無法處理獨特的HTML內容;比如CDATA部分和實符字體(如&amp)

  

  正則表達式依賴於HTML代碼的細節,並不是抽象的結構;意味着只要網頁的結構發生一點點變化,那這個程序可能就無效了。

  針對基於正則表達式的方法存在的問題,可有兩種解決方案:

(1)結合使用程序Tidy(一個python庫)和XHTML解析

  (2) 使用專為屏幕抓取而設計的Beautiful Soup

 

Tidy 和XHTML解析

  Tidy是用於對格式不正確且不嚴謹的HTML進行修復的工具,它非常聰明,能夠修復很多常見的錯誤,從而完成大量你不願意做的工作。它還提供了極大的配置空間,讓你能夠開 / 關各種校正。

  當然,Tidy並不能修復HTML文件存在的所有問題,但確實能夠確保文件是格式良好的(即所有元素都嵌套正確),這讓解析工作容易很多。

  獲取Tidy

  有多個用於python的Tidy庫包裝器,至於哪個最新並非固定不變的,找使用pip來找出可供使用的包裝器:

$pip search tidy

  可選擇安裝PyTidyLib:

$ pip install pytidylib

  並非一定要安裝Tidy庫包裝器。如果你是用的是unix或者linux系統,很可能已經默認安裝了命令行版Tidy。此外,不管使用的是什么系統,都可以從Tidy網站上獲取可執行的二進制版本,有了二進制版本之后,就可以使用模塊subprocess(或其他包含open函數的模塊)來運行Tidy程序了。

  如果python找不到tidy,可能需要提供這個可執行文件的完整路徑。

  

  XHTML 和 HTML的主要區別在於,XHTML非常嚴格,要求顯式地結束所有的元素;

  因此,在HTML可通過(使用標簽<p>)開始另一個段落來結束當前段落,但在XHTML中,必須先(使用標簽</p>)顯式地結束當前段落。這讓XHTML解析起來容易得多,因為你能清除地直到何時進入或者離開各種元素,

  XHTML的另一個優點:它是一種XML方言,可食用各種出色的工具(XPath)來處理

  要求對Tidy生成的格式良好的XHTML進行解析,一種非常簡單的方式就是使用標准庫模塊html.parser中的HTMLParser類

 待補充~ 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM