1. 程式人生 > >HttpUnit爬取中國知網特定大學網頁

HttpUnit爬取中國知網特定大學網頁

繼昨天使用Selenium+ChromeDriver爬取中國知網頁面後,今天又想到了一些別的方法,就是HtmlUnit,作為一名萌新程式設計師,多寫寫總是好的,操蛋的是,還沒想出好的爬取方法。

奉上jar包

             <!-- https://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit -->
                    <dependency>
                        <groupId>net.sourceforge.htmlunit</groupId>
                        <artifactId>htmlunit</artifactId>
                        <version>2.29</version>
                    </dependency>

                <!-- https://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit-core-js -->
                <dependency>
                    <groupId>net.sourceforge.htmlunit</groupId>
                    <artifactId>htmlunit-core-js</artifactId>
                    <version>2.28</version>
                </dependency>

HtmlUnit就是無GUI的瀏覽器操作頁面,本質上還是一個瀏覽器,所以在本質上和Selenium差別不大吧,穩定性可能存在差異。

說一下我的思路把找到特定大學的網址,檢索出論文數量,和頁面數量,抓取每個論文連線特有的filename,然後點選下一頁,以福建農林大學為例,總共100355篇論文,我最多的時候抓取到了10339條記錄,還是不完善。

下面就是程式碼了:

package com.qdcz.plugins;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit
.html.HtmlAnchor; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlSpan; import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.util.List; public class CnkiPost { /* * 獲取動態url * throws IOException * InterruptedException * */
public static void main(String args[]) throws IOException, InterruptedException { HtmlPage page=null; WebClient webClient=new WebClient(); // 禁止JS //webClient.getOptions().setJavaScriptEnabled(false); 暫不需要下一頁需要js渲染點選 // 禁止CSS webClient.getOptions().setCssEnabled(false); // 將返回錯誤狀態碼錯誤設定為false webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); // 啟動客戶端重定向 webClient.getOptions().setRedirectEnabled(true); page=webClient.getPage("http://navi.cnki.net/knavi/PPaperDetail?pcode=CDMD&logo=GFJNU"); //休息等待資料緩衝 Thread.sleep(2000); //獲取總頁數 List<HtmlSpan> span=page.getByXPath("//*[@id=\"partiallistcount2\"]"); String nums=span.get(0).asText(); int num=Integer.parseInt(nums); System.out.println(num); int y=0; for(int j=0;j<num;j++){ List<HtmlAnchor> l=page.getByXPath("//*[@id=\"rightCatalog\"]/div[2]/div[2]/table/tbody/tr/td/a"); //獲取論文的獨有的filename for(int i=0;i<l.size();i++){ String links=StringUtils.substringAfter(l.get(i).toString(),"FD&amp;"); String linkss=StringUtils.substringBefore(links,"&amp;tab"); System.out.println("--"+ i+"--"+linkss); y++; } System.out.println("現在爬取到"+ (j+1)+"頁"); //點選下一頁 HtmlAnchor next=(HtmlAnchor) page.getByXPath("//*[@id=\"rightCatalog\"]/div[1]/div[2]/a[2]").get(0); next.click(); Thread.sleep(3500); } System.out.println(y); } }

老大布置的活過了幾天了,還是原地踏步,心塞,頭疼。
諸位有什麼好的想法,可以告知一下在下,不勝感激。