2009-12-03 70 views
0

我想从Java中的网站(或Python或PHP,如果在这些语言中显示更容易)拉取整个HTML源代码文件。我只希望查看HTML并通过几种方法扫描它 - 不以任何方式编辑或操作它,并且我真的希望我不会将它写入新文件,除非没有其他方式。有没有这样的库类或方法?如果没有,有什么办法可以解决这个问题吗?从Java中的网页拉取HTML

回答

5

在Java:

URL url = new URL("http://stackoverflow.com"); 
URLConnection connection = new URLConnection(url); 
InputStream stream = url.openConnection(); 
// ... read stream like any file stream 

此代码,有利于编写脚本的目的和内部使用。虽然我会反对将它用于生产用途。它不处理超时和失败的连接。

我建议使用HttpClient library进行生产使用。它支持身份验证,重定向处理,线程处理,池化等。

+0

我想我做错了什么。编译器告诉我URLConnection不能被实例化(这是一个抽象类)。如何实例化它是否正确,或者是否存在可以实例化的URLConnection的子类? – Brian 2009-12-03 03:56:32

+0

我认为应该是 URL hp = new URL(“http://stackoverflow.com”); URLConnection hpCon = hp.openConnection(); – GustyWind 2009-12-03 04:10:30

+0

@GustlyWind,谢谢。应该实际检查代码。 – notnoop 2009-12-03 05:27:53

2

在Python:

import urllib 
# Get a file-like object for the Python Web site's home page. 
f = urllib.urlopen("http://www.python.org") 
# Read from the object, storing the page's contents in 's'. 
s = f.read() 
f.close() 

请参阅Python and HTML Processing了解更多详情。

0

也许您应该考虑一种替代方法,如从命令行运行标准实用程序(如wgetcurl)以将站点树获取到本地目录树中。然后使用本地副本进行扫描(使用Java,Python等)。这样做应该更简单,而不是自己实现所有无聊的东西,比如错误处理,参数解析等等。

如果您想要获取网站中的所有页面,wget和curl不知道如何从HTML页面获取链接。另一种方法是使用open source web crawler