在HTML文件的XPath中提取HTML



我正在尝试从给定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>&lt;div id="noscript-padding"&gt;&lt;/div&gt;</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/

相关内容

  • 没有找到相关文章