Java 如何从查找网站获取特定数据

Java 如何从查找网站获取特定数据,java,web,Java,Web,我对java网络这一部分完全陌生。 我想做的是,我希望用户添加机器类型和序列号,当他按下一个按钮时,这将从网站上提取机器的有效日期、型号和国家,然后将这些数据自动放入txt文件中。 我也希望浏览器被隐藏,但不知道怎么做。 我将非常感谢你的帮助。 此外,我更喜欢使用JTextArea,它带有一个只垂直滚动的窗格,允许用户同时添加多台机器(比如说50台机器),但我也不知道如何让程序从这个JTextArea中分别读取类型和序列 这是我目前的代码 import java.awt.BorderLayout

我对java网络这一部分完全陌生。 我想做的是,我希望用户添加机器类型和序列号,当他按下一个按钮时,这将从网站上提取机器的有效日期、型号和国家,然后将这些数据自动放入txt文件中。 我也希望浏览器被隐藏,但不知道怎么做。 我将非常感谢你的帮助。 此外,我更喜欢使用JTextArea,它带有一个只垂直滚动的窗格,允许用户同时添加多台机器(比如说50台机器),但我也不知道如何让程序从这个JTextArea中分别读取类型和序列 这是我目前的代码

import java.awt.BorderLayout;
import java.awt.Desktop;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.URI;

public class PEW_Frame extends JFrame {

private JPanel contentPane;
private JTextField type;
private JTextField serial;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                PEW_Frame frame = new PEW_Frame();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public PEW_Frame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    type = new JTextField();
    type.setBounds(121, 27, 86, 20);
    contentPane.add(type);
    type.setColumns(10);

    serial = new JTextField();
    serial.setBounds(121, 72, 86, 20);
    contentPane.add(serial);
    serial.setColumns(10);

    JLabel lblNewLabel = new JLabel("New label");
    lblNewLabel.setBounds(34, 30, 46, 14);
    contentPane.add(lblNewLabel);

    JLabel lblNewLabel_1 = new JLabel("New label");
    lblNewLabel_1.setBounds(34, 75, 46, 14);
    contentPane.add(lblNewLabel_1);

    JButton btnNewButton = new JButton("New button");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Desktop d = Desktop.getDesktop();
            String getType = type.getText();
            String getSerial = serial.getText();
            //String getType1 = type1.getText();
            //String getSerial1 = serial1.getText();
            String url = "https://www-947.ibm.com/support/entry/portal/wlup?type="+getType+"&serial="+getSerial;
            //String url1 = "https://www-947.ibm.com/support/entry/portal/wlup?type="+getType1+"&serial="+getSerial1;
            try {
                if (getType.isEmpty() || getSerial.isEmpty()) {
                    throw new Exception();
                }
                d.browse(new URI(url));
                //d.browse(new URI(url1));
            } catch (Exception e1) {
                JOptionPane.showMessageDialog(null,"You must select SLA and period","Error !", JOptionPane.ERROR_MESSAGE);
            }
        }
    });
    btnNewButton.setBounds(176, 189, 89, 23);
    contentPane.add(btnNewButton);

    //type1 = new JTextField();
    //type1.setBounds(229, 27, 86, 20);
    //contentPane.add(type1);
    //type1.setColumns(10);

    //serial1 = new JTextField();
    //serial1.setBounds(229, 72, 86, 20);
    //contentPane.add(serial1);
    //serial1.setColumns(10);
}
}

您可以从以下示例中获得一些帮助:


在后台打开url并读取页面内容以提取所需数据。请注意,这种方法是脆弱的,因为运行该站点的人可能会更改页面结构,并且可能再也找不到数据。如果你可以访问一些Web服务,我建议你使用它。正如Thomas所说,这种方法是脆弱的。如果你真的想这样做,考虑使用一个像JToin()的库,谢谢你的提示,但我仍然没有得到它,我根本不是java专家,只是试着自己学习,我想把网站本身保存为TXT(不是HTML代码),然后保存的TXT文件可以扫描我需要的数据。可能吗?这个链接,特别是代码示例(不太专业:例如关闭
try
中的资源,或者依赖
中的分隔符:“
作为响应,html将始终是json中的第一个也是唯一的元素)没有澄清任何事情,也没有帮助OP解决他的问题。谢谢你的提示,但我还是不明白,我根本不懂java,只是试着自己学习,我想把网站本身保存为txt(不是html代码),然后保存的txt文件可以扫描我需要的数据。可能吗?
public void run() {
    StringBuilder sb = new StringBuilder();

    // This posts the required fields to the sit.no RESTful menu api.
    try {
        // Prepare post data
        String postData = "diner="+ kantine.toLowerCase() +"&trigger=single";

        // Open connection
        java.net.URL url = new URL(URLTEXT);
        URLConnection conn = url.openConnection();

        // Write the post data
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(postData);
        wr.flush();

        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            sb.append(line);
        }

        wr.close();
        rd.close();
    } catch (IOException e) {
        logger.error("Failed to get JSON data from "+URLTEXT, e.getCause());
    }

    // Get the html content into a clean string
    String json = new String(sb);
    json = StringEscapeUtils.unescapeJava(json);
    String html = json.split(":")[1].replaceAll("^\"|\"}$", "");

    // Traverse html with Jsoup
    String menu = findMenuItems(html);

    setMenu(kantine, menu);
}