获取java的网站源码

我想使用java来获取网站的来源(安全),然后解析该网站中的链接。 我已经找到了如何连接到该URL,但是我怎样才能轻松获得源代码,更喜欢DOM Document oso,我可以轻松获得我想要的信息。

或者是否有更好的方法连接到https站点,获取源(我需要做的是获取数据表…非常简单)然后这些链接是我要下载的文件。

我希望它是FTP,但这些文件存储在我的tivo上(我想以编程方式将它们下载到我的电脑上(

您可以获得低级别,只需使用套接字请求它。 在java中它看起来像

// Arg[0] = Hostname // Arg[1] = File like index.html public static void main(String[] args) throws Exception { SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket sslsock = (SSLSocket) factory.createSocket(args[0], 443); SSLSession session = sslsock.getSession(); X509Certificate cert; try { cert = (X509Certificate) session.getPeerCertificates()[0]; } catch (SSLPeerUnverifiedException e) { System.err.println(session.getPeerHost() + " did not present a valid cert."); return; } // Now use the secure socket just like a regular socket to read pages. PrintWriter out = new PrintWriter(sslsock.getOutputStream()); out.write("GET " + args[1] + " HTTP/1.0\r\n\r\n"); out.flush(); BufferedReader in = new BufferedReader(new InputStreamReader(sslsock.getInputStream())); String line; String regExp = ".*.*"; Pattern p = Pattern.compile( regExp, Pattern.CASE_INSENSITIVE ); while ((line = in.readLine()) != null) { // Using Oscar's RegEx. Matcher m = p.matcher( line ); if( m.matches() ) { System.out.println( m.group(1) ); } } sslsock.close(); } 

非常相似的问题:

  • 如何使用Java从网站检索URL?
  • 你如何以编程方式下载Java网页
  • 一个很好的库,用于在Java中进行URL操作

也许你可以从Pete或sktrdie选项中获得更好的结果。 如果您想知道如何“通过”,这是另一种方法

我不是很擅长正则表达式,所以在这种情况下它会返回一行中的最后一个链接。 嗯,这是一个开始。

 import java.io.*; import java.net.*; import java.util.regex.*; public class Links { public static void main( String [] args ) throws IOException { URL url = new URL( args[0] ); InputStream is = url.openConnection().getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader( is ) ); String line = null; String regExp = ".*.*"; Pattern p = Pattern.compile( regExp, Pattern.CASE_INSENSITIVE ); while( ( line = reader.readLine() ) != null ) { Matcher m = p.matcher( line ); if( m.matches() ) { System.out.println( m.group(1) ); } } reader.close(); } } 

编辑

哎呀我完全错过了“安全”部分。 无论如何我无法帮助它,我不得不写下这个样本:P

尝试HttpUnit或HttpClient 。 虽然前者表面上是用于编写集成测试,但它有一个方便的API,用于以编程方式迭代网页的链接,类似于以下使用WebResponse.getLinks() :

 WebConversation wc = new WebConversation(); WebResponse resp = wc.getResponse("http://stackoverflow.com/questions/422970/"); WebLink[] links = resp.getLinks(); // Loop over array of links... 

您可以使用javacurl获取站点的html,并使用java DOM来分析它。

尝试使用jsoup库。

 import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class ParseHTML { public static void main(String args[]) throws IOException{ Document doc = Jsoup.connect("https://www.wikipedia.org/").get(); String text = doc.body().text(); System.out.print(text); } } 

你可以在这里下载jsoup库。

在Web上下文中有两种含义:

HTML源:如果您通过URL请求网页,则始终获取HTML源代码。 实际上,您无法从URL获得任何其他内容。 网页总是以源代码forms传输,没有编译网页这样的东西。 对于你正在尝试的东西,这应该足以完成你的任务。

脚本源:如果网页是动态生成的,那么它是用某种服务器端脚本语言编写的(如PHP,Ruby,JSP ……)。 此级别还存在源代码。 但是使用HTTP连接你无法获得这种源代码。 这不是缺失的function,而是完全按目的。

解析:说完了,你需要以某种方式解析HTML代码。 如果您只需要链接,使用RegEx(如Oscar Reyes所示)将是最实用的方法,但您也可以“手动”编写一个简单的解析器。 这将是缓慢的,更多的代码…但有效。

如果你想在更合乎逻辑的层面上访问代码,那么将它解析为DOM将是最佳选择。 如果代码是有效的XHTML,您可以将其解析为org.w3c.dom.Document并对其执行任何操作。 如果它至少是有效的HTML,您可以应用一些技巧将其转换为XHTML(在极少数情况下,通过更换
并更改doctype就足够了)并将其用作XML。

如果它不是有效的XML,则需要HTML DOM解析器。 我不知道Java是否存在这样的东西,以及它是否表现良好。

有一个FTP服务器可以安装在您的Tivo上以允许显示下载,请参见http://dvrpedia.com/MFS_FTP

问题的表达方式不同(如何处理java中的http / html),但最后你提到你想要的是下载节目。 Tivo使用他们自己的独特文件系统(MFS – 媒体文件系统),因此在另一台机器上安装驱动器并不容易 – 而是更容易在Tivo上运行http或ftp服务器并从这些下载

Interesting Posts