おかしいなと思って取得したHTMLソースを見たところ、記事の中身や写真はすべてJavaScriptでレンダリングされているようです。
多分クローラー避けなんでしょうが、最近はこういうサイトが多くて嫌になります。
残念ながらwgetはJavaScriptを処理してくれないため、このままでは記事を抜き出すことは不可能です。
ということで、JavaScriptを実行した後のHTMLを取得する方法を調べてみたのですが、PhantomJSを使うのが一番簡単そうなので試してみました。
PhantomJSは、様々なOSのディストリビューションでパッケージとして提供されています。
Xubuntuでは、
sudo apt install phantomjsFreeBSDでは、
pkg install phantomjsでインストールすることが可能です。
使い方はこんな感じです。
phantomjs script.js ${url_target} ${user_agent}「script.js」は、以下のような感じで記述します。
var system=require('system');PhantomJSが第一引数で指定した上記JavaScriptを実行してコンテンツを取得、保存します。
var webpage=require('webpage');
var url=system.args[1];
var user_agent=system.args[2];
var delay=3000;
var page=webpage.create();
page.settings.userAgent=user_agent;
page.open(url,function(status){
setTimeout(function(){var html=page.evaluate(function()
{return document.documentElement.outerHTML;});
system.stdout.write(html);phantom.exit(0);},delay);})
保存したHTMLから、無事に記事のURLを抽出できるようになりました。
尚、PhantomJSを使う以外にも、「Selenium+WebDriver+ブラウザ(ヘッドレスモード)」っていう選択肢もあるようです。
(ブラウザを実行させるためにXなどのGPU環境が必要になるなど、若干重た目かも…)
このように便利はPhantomJSですが、既に開発が終了しているようで、ちょっと残念です。
以下のページを参考にしました、ありがとうございました。
https://teratail.com/questions/19039
0 件のコメント:
コメントを投稿