java使用jsoup簡單爬蟲,jsoup爬取網頁

本文目錄一覽:

java jsoup怎樣爬取特定網頁內的數據

1、Jsoup簡述

Java中支持的爬蟲框架有很多,比如WebMagic、Spider、Jsoup等。

Jsoup擁有十分方便的api來處理html文檔,比如參考了DOM對象的文檔遍歷方法,參考了CSS選擇器的用法等等,因此我們可以使用Jsoup快速地掌握爬取頁面數據的技巧。

2、快速開始

1)分析HTML頁面,明確哪些數據是需要抓取的

2)使用HttpClient讀取HTML頁面

HttpClient是一個處理Http協議數據的工具,使用它可以將HTML頁面作為輸入流讀進java程序中.

3)使用Jsoup解析html字符串

通過引入Jsoup工具,直接調用parse方法來解析一個描述html頁面內容的字符串來獲得一個Document對象。該Document對象以操作DOM樹的方式來獲得html頁面上指定的內容。

3、保存爬取的頁面數據

1)保存普通數據到數據庫中

將爬取的數據封裝進實體Bean中,並存到數據庫內。

2)保存圖片到服務器上

直接通過下載圖片的方式將圖片保存到服務器本地。

java爬蟲抓取指定數據

根據java網絡編程相關的內容,使用jdk提供的相關類可以得到url對應網頁的html頁面代碼。

針對得到的html代碼,通過使用正則表達式即可得到我們想要的內容。

比如,我們如果想得到一個網頁上所有包括「java」關鍵字的文本內容,就可以逐行對網頁代碼進行正則表達式的匹配。最後達到去除html標籤和不相關的內容,只得到包括「java」這個關鍵字的內容的效果。

從網頁上爬取圖片的流程和爬取內容的流程基本相同,但是爬取圖片的步驟會多一步。

需要先用img標籤的正則表達式匹配獲取到img標籤,再用src屬性的正則表達式獲取這個img標籤中的src屬性的圖片url,然後再通過緩衝輸入流對象讀取到這個圖片url的圖片信息,配合文件輸出流將讀到的圖片信息寫入到本地即可。

如何用java爬蟲爬取招聘信息

1、思路:

明確需要爬取的信息

分析網頁結構

分析爬取流程

優化

2、明確需要爬取的信息

職位名稱

工資

職位描述

公司名稱

公司主頁

詳情網頁

分析網頁結構

3、目標網站-拉勾網

網站使用json作為交互數據,分析json數據,需要的json關鍵數據

查看需要的信息所在的位置,使用Jsoup來解析網頁

4、分析爬取流程

1.獲取所有的positionId生成詳情頁,存放在一個存放網址列表中ListString joburls

2.獲取每個詳情頁並解析為Job類,得到一個存放Job類的列表ListJob jobList

3.把ListJob jobList存進Excel表格中

Java操作Excel需要用到jxl

5、關鍵代碼實現

public ListString getJobUrls(String gj,String city,String kd){

String pre_url=””;

String end_url=”.html”;

String url;

if (gj.equals(“”)){

url=”;city=”+city+”needAddtionalResult=falsefirst=falsepn=”+pn+”kd=”+kd;

}else {

url=””+gj+”px=defaultcity=”+city+”needAddtionalResult=falsefirst=falsepn=”+pn+”kd=”+kd;

}

String rs=getJson(url);

System.out.println(rs);

int total= JsonPath.read(rs,”$.content.positionResult.totalCount”);//獲取總數

int pagesize=total/15;

if (pagesize=30){

pagesize=30;

}

System.out.println(total);

// System.out.println(rs);

ListInteger posid=JsonPath.read(rs,”$.content.positionResult.result[*].positionId”);//獲取網頁id

for (int j=1;j=pagesize;j++){ //獲取所有的網頁id

pn++; //更新頁數

url=””+gj+”px=defaultcity=”+city+”needAddtionalResult=falsefirst=falsepn=”+pn+”kd=”+kd;

String rs2=getJson(url);

ListInteger posid2=JsonPath.read(rs2,”$.content.positionResult.result[*].positionId”);

posid.addAll(posid2); //添加解析的id到第一個list

}

ListString joburls=new ArrayList();

//生成網頁列表

for (int id:posid){

String url3=pre_url+id+end_url;

joburls.add(url3);

}

return joburls;

}

public Job getJob(String url){ //獲取工作信息

Job job=new Job();

Document document= null;

document = Jsoup.parse(getJson(url));

job.setJobname(document.select(“.name”).text());

job.setSalary(document.select(“.salary”).text());

String joball=HtmlTool.tag(document.select(“.job_bt”).select(“div”).html());//清除html標籤

job.setJobdesc(joball);//職位描述包含要求

job.setCompany(document.select(“.b2”).attr(“alt”));

Elements elements=document.select(“.c_feature”);

//System.out.println(document.select(“.name”).text());

job.setCompanysite(elements.select(“a”).attr(“href”)); //獲取公司主頁

job.setJobdsite(url);

return job;

}

void insertExcel(ListJob jobList) throws IOException, BiffException, WriteException {

int row=1;

Workbook wb = Workbook.getWorkbook(new File(JobCondition.filename));

WritableWorkbook book = Workbook.createWorkbook(new File(JobCondition.filename), wb);

WritableSheet sheet=book.getSheet(0);

for (int i=0;ijobList.size();i++){ //遍歷工作列表,一行行插入到表格中

sheet.addCell(new Label(0,row,jobList.get(i).getJobname()));

sheet.addCell(new Label(1,row,jobList.get(i).getSalary()));

sheet.addCell(new Label(2,row,jobList.get(i).getJobdesc()));

sheet.addCell(new Label(3,row,jobList.get(i).getCompany()));

sheet.addCell(new Label(4,row,jobList.get(i).getCompanysite()));

sheet.addCell(new Label(5,row,jobList.get(i).getJobdsite()));

row++;

}

book.write();

book.close();

}

原創文章,作者:JELDY,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/329060.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JELDY的頭像JELDY
上一篇 2025-01-14 18:55
下一篇 2025-01-14 18:55

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Python爬蟲可以爬哪些網站

    Python是被廣泛運用於數據處理和分析領域的編程語言之一。它具有易用性、靈活性和成本效益高等特點,因此越來越多的人開始使用它進行網站爬取。本文將從多個方面詳細闡述,Python爬…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論