我正在尝试从给定Xpath的文件中获取html代码。我尝试使用HTMLUnit,但它似乎不能很好地发挥这些静态文件下载从谷歌缓存。我在HTMLCleaner上的运气要好一点,但到目前为止,我只能获得文本而没有HTML代码。任何建议都会很有帮助。以下是我目前正在使用的代码。
TagNode tagNode = new HtmlCleaner().clean(readFile(htmlCacheFile));
Document doc = new DomSerializer(new CleanerProperties()).createDOM(tagNode);
XPath xpath = XPathFactory.newInstance().newXPath();
String title = ((String) xpath.evaluate(TITLE_XPATH, doc, XPathConstants.STRING)).trim();
String body = ((String) xpath.evaluate(BODY_XPATH, doc, XPathConstants.STRING)).trim();
必须是Java解决方案吗?你想要做的是完全有可能在无头浏览器中运行站点刮板。PhantomJs是一个无头WebKit,它允许你在网页上执行JavaScript/CoffeeScript。我想它可以帮助你解决你的问题。
pjscraper是一个非常有用的基于PhantomJs的网页抓取工具。
下面是一个示例(config.js),它记录到控制台(也可能到文件):
pjs.addSuite({
url: 'http://stackoverflow.com/',
noConflict: true,
scraper: function() {
var html = _pjs.$('body').html();
return html;
}
});
从phantomjs pjscrape.js config.js
结果:
* Suite 0 starting
* Opening http://stackoverflow.com/
* Scraping http://stackoverflow.com/
* Suite 0 complete
* Writing 1 items
["n <noscript><div id="noscript-padding"></div></noscript>n <div id="notify-container"></div>n <div id="overlay-header"></div>n <div id="custom-header"></div>nn <div class="container">n <div id="header">n <div id="portalLink">n <a class="genu" onclick="StackExchange.ready(function(){genuwine.click();});return false;">Stack Exchange</a>n
...
也许这有帮助。在下面的链接中有XPath示例和JSoup解决相同问题的方法。如果你熟悉或不熟悉CSS选择器(有很多解析、清理等方法),可以使用jsoup,它是一个非常强大的html解析库。如果我没理解错的话,目标是从文件中获取正文和标题。
我对这个问题的解决方案是:
Document webpage = Jsoup.parse(new File("file.html"), "UTF-8");
System.out.println(webpage.title()+" "+webpage.body().html());
https://norrisshelton.wordpress.com/2011/01/27/jsoup-java-html-parser/