问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

设计一个JAVA程序,下载由URL指定的网页的源代码,找出其中所有的超链接...

发布网友 发布时间:2022-04-24 07:07

我来回答

4个回答

热心网友 时间:2022-05-13 06:59

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class HttpViewer extends JFrame {
    private JTextField urlInput;
    private JTextArea viewArea;

    public static void main(String[] args) {
        new HttpViewer();
    }

    public HttpViewer() {
        this.setTitle("Http Viewer");
        this.setSize(800, 600);
        this.setResizable(false);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        initPanel();
        initAction();
        this.setVisible(true);
    }

    // 这个方法用来设置窗口布局
    private void initPanel() {
        JPanel northPanel = new JPanel();
        JLabel urlInputLabel = new JLabel("URL:");
        urlInput = new JTextField(60);
        northPanel.add(urlInputLabel);
        northPanel.add(urlInput);
        this.add(northPanel, BorderLayout.NORTH);

        JPanel centerPanel = new JPanel();
        viewArea = new JTextArea(27, 60);
        centerPanel.add(new JScrollPane(viewArea));
        this.add(centerPanel);
    }

    // 这个方法用来设置事件
    private void initAction() {
        urlInput.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String text = urlInput.getText();
                if (text == null || text.length() == 0) {
                    viewArea.setText("您没有输入URL");
                    return;
                }
                try {
                    URL url = new URL(text);
                    String context = getContent(url);
                    if (context != null) {
                        searchFromText(context);
                    }
                } catch (MalformedURLException e1) {
                    viewArea.setText("您输入的URL不合法:" + text);
                }
            }
        });
    }

    private String getContent(URL url) {
        StringBuffer builder = new StringBuffer();

        int responseCode = -1;
        HttpURLConnection con = null;
        try {
            con = (HttpURLConnection) url.openConnection();
            con.setRequestProperty("User-Agent",
                    "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");// IE代理进行下载
            con.setConnectTimeout(60000);
            con.setReadTimeout(60000);

            // 获得网页返回信息码
            responseCode = con.getResponseCode();

            if (responseCode == -1) {
                viewArea.setText("连接失败:" + url.toString());
                return null;
            }

            if (responseCode >= 400) {
                viewArea.setText("请求失败,错误码:" + responseCode);
                return null;
            }

            InputStream is = con.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);

            String str = null;
            while ((str = br.readLine()) != null)
                builder.append(str);
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
            viewArea.setText("IOException: " + url.toString());
        } finally {
            con.disconnect();
        }
        return builder.toString();
    }

    private void searchFromText(String context) {
        viewArea.setText("查找URL中:\n");
        Pattern pattern = Pattern.compile("<a( [^>]+)*>(.*?)</a>");
        Matcher matcher = pattern.matcher(context);
        while (matcher.find()) {
            for (String prop : matcher.group(1).split(" ")) {
                int indexOf = prop.indexOf('=');
                if (indexOf > 0) {
                    if (prop.substring(0, indexOf).equals("href")) {
                        String url2 = prop.substring(indexOf + 2, prop.length() - 1);
                        viewArea.append(url2 + "\n");
                    }
                }
            }
        }
    }

}

热心网友 时间:2022-05-13 08:17

// 下载JSoup然后几行代码就可以
Document doc = Jsoup.connect("http://example.com").userAgent("Mozilla").get();
Elements links = doc.select("a[href]");
for (Element link : links) {
String linkHref =link.attr("href"); // 得到链接
String linkText =link.text(); // 得到显示的文字
}追问都说小白了,不知道怎么弄

热心网友 时间:2022-05-13 09:52

你交作业吧?

这应该是基础的东西吧?一个抓取,加正则,一个数据库读取写入。两个都不是太难的东西。。追问是的,我不会,时间也急

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
微信是哪一年开始普及的 河北省承德市隆化县有哪些高级中学 孕期喝茶对胎儿有影响吗 怀孕三个月能喝红茶吗 广安御溪湖畔有多少户? 广安御溪湖畔在什么位置? 广安御溪湖畔容积率是多少? 长春市第六中学学校优势 长春市第六中学介绍 长春六中教育怎么样?? 关于几个苏州景点的票价 Java:这两种设置超时时间有什么区别? 问下李荣浩11月9日苏州演唱会的门票在哪里可以买? 小野丽莎苏州演唱会的票现在还有哪里可以买? java HttpURLConnection 设置超时没有效果,该怎么处理 Jsoup 请求链接含中文乱码 恋爱的犀牛苏州演出票价具体是? java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native M Jsoup 抓取网页,字符是乱码,怎么转换?跪求拜托了各位 谢谢 林宥嘉苏州演唱会门票多少钱,怎么买票? java socket 超时 异常 求解决 java.net.SocketTimeoutException: Read timed out 直播带货如何推动经济发展? 张学友2011苏州演唱会票价怎么样 求问苏州迷笛音乐节的票价是多少? java.net.SocketTimeoutException: Read timed out求解决 小野丽莎苏州演唱会的票价是多少? 我再用jsoup写爬虫时,想要获取页面的所有子链接代码如下: 最近做java网页爬虫用jsoup 写了一个方法main执行正常 放在action里调用这个方法就不正常求解 java jsoup 爬虫 怎么防止重复爬取 项目可行性研究报告需要提供哪些资料 苏州门票 java如何获取含ajax的网页数据 刘德华苏州演唱会票务 请教高手:Axis webservice 出现java.net.SocketTimeoutException: Read timed out 请问苏州四大园林的门票各多少啊 苏州各个有名景点门票都是多少钱?? 李荣浩巡演苏州站的票在哪里买的到,票价多少? 苏州有哪些好玩的地方?门票是多少? 苏州园林门票价目表 摩根士丹利和摩根大通的区别是? 摩根大通 美国摩根大通银行在深圳有分支机构吗? 对讲机进水了怎么办 下雨天对讲机挂在身上对讲机进水了该怎么办? 对讲机掉水里后开不了机了怎么办? 对讲机进水怎么办? 对讲机进水了能修好吗 对讲机进水立马拿了出来,开机声音变小了,时不时的跳屏,等水干了会好吗? 对讲机进水听不到和说不出话能修吗 海能达对讲机型号tc一320进水了还可修好吗