導航:首頁 > 編程語言 > java網路爬蟲代碼

java網路爬蟲代碼

發布時間:2023-09-04 02:47:02

java 網路爬蟲怎麼實現

以爬取豆瓣《紅海行動》的所有評論為例,目標是爬取所有評論以及發表評論的用戶名。

getHtml()類,首先是URL url1=new URL(url);模擬在網頁輸入網址,接著 URLConnection uc=url1.openConnection();模擬敲回車鍵打開該網址頁面,後面的看注釋應該能看懂了。bf.readLine()是依次每行讀取頁面的源碼

/**
* 下載HTML頁面源碼
* @author yangjianxin
* @return string @author yangjianxin
* @time 2018-03-09
*/

public static String getHtml(String url,String encoding) {
StringBuffer sb=new StringBuffer();
BufferedReader bf = null;
InputStreamReader isr = null;
try {
//創建網路連接
URL url1=new URL(url);
//打開網路
URLConnection uc=url1.openConnection();
uc.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//建立文件輸入流
isr=new InputStreamReader(uc.getInputStream(),encoding);
//高效率讀取
bf=new BufferedReader(isr);
//下載頁面源碼

String temp=null;
while((temp=bf.readLine())!=null) {
sb.append(temp+"\n");
}
//System.out.println(sb.toString());

} catch (MalformedURLException e) {
System.out.println("網頁打開失敗,請重新輸入網址。");
e.printStackTrace();
}catch (IOException e) {
System.out.println("網頁打開失敗,請檢查網路。");
e.printStackTrace();
}finally {
if(bf!=null) {try {
bf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(isr!=null) {
try {
isr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return sb.toString();

}

getGoalDate()類,Document document=Jsoup.parse(html),運用Jsoup.parse()解析網頁源碼,接著就是開始確定自己需要爬取的東西在網頁里的位置,這需要我們對html有點了解,能看、讀懂網頁標簽,可以看出當前頁面的所有評論都在id為"content"的大盒子里,每條評論都在class名為"main review-item"的小盒子里, for(Element el:elments)是指對象el在當前頁面循環去小盒子"main review-item"查找我們要爬取的東西,也就是用戶名和評論, String name=el.getElementsByClass("name").text()中的「name」可以在當前盒子里查找到用戶名,用.text()將它賦予給變數name,同理評論也是這樣抓取,如果不用將它存入磁碟,則可以後面那段文件操作刪除,只列印就行

❷ java爬蟲抓取指定數據

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

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

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

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

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

❸ 如何用JAVA寫一個知乎爬蟲

下面說明知乎爬蟲的源碼和涉及主要技術點:
(1)程序package組織

(2)模擬登錄(爬蟲主要技術點1)
要爬去需要登錄的網站數據,模擬登錄是必要可少的一步,而且往往是難點。知乎爬蟲的模擬登錄可以做一個很好的案例。要實現一個網站的模擬登錄,需要兩大步驟是:(1)對登錄的請求過程進行分析,找到登錄的關鍵請求和步驟,分析工具可以有IE自帶(快捷鍵F12)、Fiddler、HttpWatcher;(2)編寫代碼模擬登錄的過程。

(3)網頁下載(爬蟲主要技術點2)
模擬登錄後,便可下載目標網頁html了。知乎爬蟲基於HttpClient寫了一個網路連接線程池,並且封裝了常用的get和post兩種網頁下載的方法。

(4)自動獲取網頁編碼(爬蟲主要技術點3)
自動獲取網頁編碼是確保下載網頁html不出現亂碼的前提。知乎爬蟲中提供方法可以解決絕大部分亂碼下載網頁亂碼問題。

(5)網頁解析和提取(爬蟲主要技術點4)
使用Java寫爬蟲,常見的網頁解析和提取方法有兩種:利用開源Jar包Jsoup和正則。一般來說,Jsoup就可以解決問題,極少出現Jsoup不能解析和提取的情況。Jsoup強大功能,使得解析和提取異常簡單。知乎爬蟲採用的就是Jsoup。

(6)正則匹配與提取(爬蟲主要技術點5)
雖然知乎爬蟲採用Jsoup來進行網頁解析,但是仍然封裝了正則匹配與提取數據的方法,因為正則還可以做其他的事情,如在知乎爬蟲中使用正則來進行url地址的過濾和判斷。

(7)數據去重(爬蟲主要技術點6)
對於爬蟲,根據場景不同,可以有不同的去重方案。(1)少量數據,比如幾萬或者十幾萬條的情況,使用Map或Set便可;(2)中量數據,比如幾百萬或者上千萬,使用BloomFilter(著名的布隆過濾器)可以解決;(3)大量數據,上億或者幾十億,Redis可以解決。知乎爬蟲給出了BloomFilter的實現,但是採用的Redis進行去重。

(8)設計模式等Java高級編程實踐
除了以上爬蟲主要的技術點之外,知乎爬蟲的實現還涉及多種設計模式,主要有鏈模式、單例模式、組合模式等,同時還使用了Java反射。除了學習爬蟲技術,這對學習設計模式和Java反射機制也是一個不錯的案例。
4. 一些抓取結果展示

❹ java爬蟲讀取某一張指定圖片的url,求解答

使用jsoup解析到這個url就行,dom結構如下:

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

1、思路:
明確需要爬取的信息
分析網頁結構
分析爬取流程
優化
2、明確需要爬取的信息
職位名稱
工資
職位描述
公司名稱
公司主頁
詳情網頁
分析網頁結構
3、目標網站-拉勾網
網站使用json作為交互數據,分析json數據,需要的json關鍵數據
查看需要的信息所在的位置,使用Jsoup來解析網頁
4、分析爬取流程
1.獲取所有的positionId生成詳情頁,存放在一個存放網址列表中List<String> joburls
2.獲取每個詳情頁並解析為Job類,得到一個存放Job類的列表List<Job> jobList
3.把List<Job> jobList存進Excel表格中
Java操作Excel需要用到jxl
5、關鍵代碼實現
public List<String> getJobUrls(String gj,String city,String kd){

String pre_url="https://www.lagou.com/jobs/";
String end_url=".html";
String url;
if (gj.equals("")){

url="http://www.lagou.com/jobs/positionAjax.json?px=default&city="+city+"&needAddtionalResult=false&first=false&pn="+pn+"&kd="+kd;

}else {

url="https://www.lagou.com/jobs/positionAjax.json?gj="+gj+"&px=default&city="+city+"&needAddtionalResult=false&first=false&pn="+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);

List<Integer> posid=JsonPath.read(rs,"$.content.positionResult.result[*].positionId");//獲取網頁id

for (int j=1;j<=pagesize;j++){ //獲取所有的網頁id
pn++; //更新頁數
url="https://www.lagou.com/jobs/positionAjax.json?gj="+gj+"&px=default&city="+city+"&needAddtionalResult=false&first=false&pn="+pn+"&kd="+kd;
String rs2=getJson(url);
List<Integer> posid2=JsonPath.read(rs2,"$.content.positionResult.result[*].positionId");
posid.addAll(posid2); //添加解析的id到第一個list
}
List<String> 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(List<Job> 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;i<jobList.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();
}

❻ 用java編寫 網路爬蟲求代碼和流程 急

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.regex.*;
import javax.swing.*;
import javax.swing.table.*;//一個Web的爬行者(註:爬行在這里的意思與抓取,捕獲相同)
public class SearchCrawler extends JFrame{
//最大URL保存值
private static final String[] MAX_URLS={"50","100","500","1000"};

//緩存robot禁止爬行列表
private HashMap disallowListCache=new HashMap();

//搜索GUI控制項
private JTextField startTextField;
private JComboBox maxComboBox;
private JCheckBox limitCheckBox;
private JTextField logTextField;
private JTextField searchTextField;
private JCheckBox caseCheckBox;
private JButton searchButton;

//搜索狀態GUI控制項
private JLabel crawlingLabel2;
private JLabel crawledLabel2;
private JLabel toCrawlLabel2;
private JProgressBar progressBar;
private JLabel matchesLabel2;

//搜索匹配項表格列表
private JTable table;

//標記爬行機器是否正在爬行
private boolean crawling;

//寫日誌匹配文件的引用
private PrintWriter logFileWriter;

//網路爬行者的構造函數
public SearchCrawler(){
//設置應用程序標題欄
setTitle("搜索爬行者");
//設置窗體大小
setSize(600,600);

//處理窗體關閉事件
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
actionExit();
}
});

//設置文件菜單
JMenuBar menuBar=new JMenuBar();
JMenu fileMenu=new JMenu("文件");
fileMenu.setMnemonic(KeyEvent.VK_F);
JMenuItem fileExitMenuItem=new JMenuItem("退出",KeyEvent.VK_X);
fileExitMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionExit();
}
});
fileMenu.add(fileExitMenuItem);
menuBar.add(fileMenu);
setJMenuBar(menuBar);

閱讀全文

與java網路爬蟲代碼相關的資料

熱點內容
大型雲伺服器有哪些 瀏覽:463
解壓版三國街機 瀏覽:421
去中心化app裡麵包含什麼 瀏覽:948
密鑰安裝命令行 瀏覽:505
文獻編譯英文 瀏覽:659
php調用瀏覽器 瀏覽:527
數控車床編程初學實例 瀏覽:949
cad中篩選命令是什麼 瀏覽:800
數控銑床法蘭克編程 瀏覽:330
怎麼樣分解壓縮包圖標 瀏覽:619
php兩年工作經驗簡歷 瀏覽:765
怎麼提前解壓房貸 瀏覽:699
反詐宣傳app哪裡可以拿到用戶資料 瀏覽:856
華為交換機命令配置 瀏覽:11
電機pid演算法實例c語言 瀏覽:972
安裝ue5未找到金屬編譯器 瀏覽:964
l1壓縮性骨折微創手術 瀏覽:615
看電腦配置命令 瀏覽:109
單片機調用db數值偏移量 瀏覽:446
賓士smart車型壓縮機功率 瀏覽:529