1. 程式人生 > >一次遍歷網頁抓取資料經歷

一次遍歷網頁抓取資料經歷

起因:杭電ACM的試題列表不能按照指定條件顯示。

例如:

  1. 按試題被AC次數倒排序。
  2. 對未被我解決的試題,按被AC次數倒排序。

任務分解:

  1. 獲取網頁html資料到程式記憶體。使用URL類可輕鬆完成此任務。
  2. 將html轉換成document。使用Cobra包可輕鬆完成此任務。
  3. 定位獲取指定內容。使用XPath類可輕鬆完成此任務。
  4. 進一步提取資料,並生成插入SQL語句。使用正則表示式可輕鬆完成此任務。
  5. 執行SQL語句。
  6. 使用SQL語句進行分析。

輔助工具:

  1. Firefox的XPath Checker外掛,可以檢查你的XPath表示式是否正確。
  2. Firefox的Firebug外掛,可以在控制檯使用JavaScript來確定該如何讀取定位到的內容。

一些問題:

  1. 為什麼不使用DocumentBuilder類直接解析html?

    我面對的網頁的格式並不標準,它的很多標籤屬性值並沒有使用引號引起來。

  2. 為什麼不使用Jsoup包來解析html?

    它生成的Document並沒有實現介面:org.w3c.dom.Document,從而不能使用XPath來定位。

  3. 為什麼使用XPath來定位?

    邏輯清晰,結構緊湊。

  4. 為什麼使用XPath Checker找不到匹配項?

    瀏覽器為table標籤產生了子標籤tbody,tr標籤在tbody內。

關鍵步驟:

  1. 編寫XPath
  2. 生成插入SQL語句