java怎么寫網絡爬蟲

1.求用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){
【java怎么寫網絡爬蟲】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);
2.java 網絡爬蟲怎么實現網絡爬蟲是一個自動提取網頁的程序,它為搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成 。
傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件 。對于垂直搜索來說,聚焦爬蟲,即有針對性地爬取特定主題網頁的爬蟲,更為適合 。
以下是一個使用java實現的簡單爬蟲核心代碼: public void crawl() throws Throwable { while (continueCrawling()) { CrawlerUrl url = getNextUrl(); //獲取待爬取隊列中的下一個URL if (url != null) { printCrawlInfo(); String content = getContent(url); //獲取URL的文本信息 //聚焦爬蟲只爬取與主題內容相關的網頁,這里采用正則匹配簡單處理 if (isContentRelevant(content, this.regexpSearchPattern)) { saveContent(url, content); //保存網頁至本地 //獲取網頁內容中的鏈接,并放入待爬取隊列中 Collection urlStrings = extractUrls(content, url); addUrlsToUrlQueue(url, urlStrings); } else { System.out.println(url + " is not relevant ignoring。"); } //延時防止被對方屏蔽 Thread.sleep(this.delayBetweenUrls); } } closeOutputStream(); }private CrawlerUrl getNextUrl() throws Throwable { CrawlerUrl nextUrl = null; while ((nextUrl == null) && (!urlQueue.isEmpty())) { CrawlerUrl crawlerUrl = this.urlQueue.remove(); //:是否有權限訪問該URL,友好的爬蟲會根據網站提供的"Robot.txt"中配置的規則進行爬取 //isUrlAlreadyVisited:URL是否訪問過,大型的搜索引擎往往采用BloomFilter進行排重,這里簡單使用HashMap //isDepthAcceptable:是否達到指定的深度上限 。
爬蟲一般采取廣度優先的方式 。一些網站會構建爬蟲陷阱(自動生成一些無效鏈接使爬蟲陷入死循環),采用深度限制加以避免 if ((crawlerUrl) && (!isUrlAlreadyVisited(crawlerUrl)) && isDepthAcceptable(crawlerUrl)) { nextUrl = crawlerUrl; // System.out.println("Next url to be visited is " + nextUrl); } } return nextUrl; }private String getContent(CrawlerUrl url) throws Throwable { //HttpClient4.1的調用與之前的方式不同 HttpClient client = new DefaultHttpClient(); HttpGet ");