0

特定の Xpath にあるファイルから html コードを取得しようとしています。HTMLUnit を使用してみましたが、Google キャッシュからダウンロードしたこれらの静的ファイルをうまく処理できないようです。私は 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();
4

2 に答える 2

0

Javaソリューションである必要がありますか?あなたがやりたいことは、ヘッドレスブラウザで実行されているサイトスクレーパーで完全に可能です。PhantomJsはヘッドレスWebKitであり、WebページでJavaScript/CoffeeScriptを実行できます。それはあなたの問題を解決するのに役立つと思います。

Pjscrapeは、PhantomJsに基づく便利なWebスクレイピングツールです。

次に、コンソールにログを記録する例(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>\n\n    <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   

...
于 2013-01-05T18:33:53.270 に答える
0

多分これは助けになります。以下のリンクには、同じ問題の XPath の例と JSoup ソリューションがあります。CSS セレクターに精通しているかどうかに関係なく (解析、クリーニングなどの方法はたくさんあります)、html 解析用の非常に強力なライブラリである jsoup を使用してください。ファイルから本文とタイトルを取得することが目標であることを理解していれば。

この問題に対する私の解決策は次のとおりです。

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/

于 2013-01-05T19:21:10.067 に答える