1. 程式人生 > >[Java爬蟲] 使用 Xpath + HtmlUnit 爬取網頁基本資訊

[Java爬蟲] 使用 Xpath + HtmlUnit 爬取網頁基本資訊

一、前言

使用 Jsoup + HttpClient (組合一)基本可以爬取很多我們需要的資訊了,Xpath + HtmlUnit (組合二)的組合更是強大,無論是從選擇上,還是從解析上,都可以勝任組合一的。下面列舉一個簡單的例子,主要展示了其主要的技術:①模擬瀏覽器、②使用代理IP、③取消CSS、JS解析、④Xpath的簡單使用

二、需求

現在要爬取 CSDN 的【今日推薦】的文章標題(實際應用上,應該是爬取整篇文章,很多 IT 社群就是這樣建立起來的)
這裡寫圖片描述

三、程式碼

package com.cun.test;

import java.io.IOException;
import
java.net.MalformedURLException; import java.util.List; import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlPage; /** * 核心技術: * 1、HtmlUnit 基本使用架構 * 2、HtmlUnit 模擬瀏覽器 * 3、使用代理 IP * 4、靜態網頁爬取,取消 CSS、JS 支援,提高速度 * @author
linhongcun * */
public class JsoupHttpClient { public static void main(String[] args) { // 例項化Web客戶端、①模擬 Chrome 瀏覽器 ✔ 、②使用代理IP ✔ WebClient webClient = new WebClient(BrowserVersion.CHROME, "118.114.77.47", 8080); webClient.getOptions().setCssEnabled(false); // 取消 CSS 支援 ✔ webClient.getOptions().setJavaScriptEnabled(false
); // 取消 JavaScript支援 ✔ try { HtmlPage page = webClient.getPage("https://www.csdn.net/"); // 解析獲取頁面 /** * Xpath:級聯選擇 ✔ * ① //:從匹配選擇的當前節點選擇文件中的節點,而不考慮它們的位置 * ② h3:匹配<h3>標籤 * ③ [@class='company_name']:屬性名為class的值為company_name * ④ a:匹配<a>標籤 */ List<HtmlElement> spanList=page.getByXPath("//h3[@class='company_name']/a"); for(int i=0;i<spanList.size();i++) { //asText ==> innerHTML ✔ System.out.println(i+1+"、"+spanList.get(i).asText()); } } catch (FailingHttpStatusCodeException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { webClient.close(); // 關閉客戶端,釋放記憶體 } } }

pom.xml依賴

        <dependency>
            <groupId>net.sourceforge.htmlunit</groupId>
            <artifactId>htmlunit</artifactId>
            <version>2.29</version>
        </dependency>

四、效果

這裡寫圖片描述

怎樣,是不是覺得很簡單?

——————————2018.3.22—————————
後來才發現少了網頁的原始碼,這樣使用 Xpath 的那部分程式碼就有點難以理解
今天就補上去吧,雖然今日推薦已經改了,但是標籤結構是不變的
這裡寫圖片描述