Jsoup + HtmlUtil 實現網易新聞網頁爬蟲
1.這裡先說明為什麼要用HtmlUtil,僅用Jsoup不行嗎?
如果用Jsoup的方法,那麼爬取網頁的程式碼如下,這也是比較簡單的形式了。
Document docu1=Jsoup.connect(url).get();
用上述程式碼只能爬取靜態網頁的,當遇到動態網頁就會發現你想要的內容爬取不出來。因此我用到了HtmlUtil。
具體程式碼如下:這裡面的方法getHtmlFromUrl(String url)返回一個文件物件,然後可以通過Jsoup的一系列方法獲得想要的內容。
具體的解釋看這篇文章
import org.jsoup.nodes.Document;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
public class HtmlUnitUtil {
public static Document getHtmlFromUrl(String url) throws Exception{
WebClient webClient = new WebClient();
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setTimeout(10000);
HtmlPage htmlPage = null;
try {
htmlPage = webClient.getPage(url);
webClient.waitForBackgroundJavaScript(10000);
String htmlString = htmlPage.asXml();
return Jsoup.parse(htmlString);
} finally {
webClient.close();
}
}
}
下面的url表示你想要爬取的頁面的地址。
for(String url:ls){
Document docu1=null;
try {
docu1 = HtmlUnitUtil.getHtmlFromUrl(url);
Elements lis = docu1.getElementsByClass("hot_text");
//爬取的模組名
Elements first_span = docu1.select("#list_wrap > div.list_content > div.area.baby_list_title > h2 > a");
for(Element e:lis){
if(e.getElementsByTag("a").size()==0){
continue;
}
else{
Element e_a = e.getElementsByTag("a").get(0);
//新聞標題
String title = e_a.text();
String newsUrl=e_a.attr("href");
newsUrl = "http:" + newsUrl;
count++;
String moduleName=first_span.get(0).text();
System.out.println(title+"("+moduleName+"):"+newsUrl);
}
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
上面的程式碼實現瞭如下的內容爬取。
maven依賴如下:
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.18</version>
</dependency>
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit-core-js</artifactId>
<version>2.9</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-collections/commons-collections -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
感興趣的可以試試。
參考文章: https://blog.csdn.net/gx304419380/article/details/80619043
相關文章
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- [網路爬蟲] Jsoup : HTML 解析工具爬蟲JSHTML
- 大規模非同步新聞爬蟲:網頁正文的提取非同步爬蟲網頁
- 大規模非同步新聞爬蟲:實現一個同步定向新聞爬蟲非同步爬蟲
- 《網頁爬蟲》網頁爬蟲
- 爬蟲——網頁爬取方法和網頁解析方法爬蟲網頁
- 大規模非同步新聞爬蟲: 用asyncio實現非同步爬蟲非同步爬蟲
- Python爬蟲實踐--爬取網易雲音樂Python爬蟲
- Python爬蟲實踐-網易雲音樂Python爬蟲
- 爬取網站新聞網站
- 爬蟲搭建代理池、爬取某網站影片案例、爬取新聞案例爬蟲網站
- 爬蟲實戰:探索XPath爬蟲技巧之熱榜新聞爬蟲
- python實現selenium網路爬蟲Python爬蟲
- 大規模非同步新聞爬蟲的實現思路非同步爬蟲
- node:爬蟲爬取網頁圖片爬蟲網頁
- 網頁爬蟲--未完成網頁爬蟲
- python 爬蟲網頁登陸Python爬蟲網頁
- 網路爬蟲技術Jsoup——爬到一切你想要的爬蟲JS
- 大規模非同步新聞爬蟲:實現一個更好的網路請求函式非同步爬蟲函式
- 網路爬蟲——爬蟲實戰(一)爬蟲
- Python靜態網頁爬蟲專案實戰Python網頁爬蟲
- 大規模非同步新聞爬蟲的分散式實現非同步爬蟲分散式
- 【爬蟲】網頁抓包工具--Fiddler爬蟲網頁
- 爬蟲抓取網頁資料原理爬蟲網頁
- 大規模非同步新聞爬蟲:簡單的百度新聞爬蟲非同步爬蟲
- 爬蟲進階——動態網頁Ajax資料抓取(簡易版)爬蟲網頁
- 如何用Python網路爬蟲爬取網易雲音樂歌曲Python爬蟲
- LLM實戰:當網頁爬蟲整合gpt3.5網頁爬蟲GPT
- 大規模非同步新聞爬蟲:實現功能強大、簡潔易用的網址池(URL Pool)非同步爬蟲
- Java爬蟲利器HTML解析工具-JsoupJava爬蟲HTMLJS
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 2-網頁基礎Python爬蟲網頁
- 爬蟲抓取網頁的詳細流程爬蟲網頁
- Java培訓教程之使用Jsoup實現簡單的爬蟲技術JavaJS爬蟲
- python網路爬蟲應用_python網路爬蟲應用實戰Python爬蟲
- Node JS爬蟲:爬取瀑布流網頁高清圖JS爬蟲網頁
- Java實現網路爬蟲 案例程式碼Java爬蟲
- 易車網實戰+【保姆級】:Feapder爬蟲框架入門教程爬蟲框架
- Python網路爬蟲實戰Python爬蟲