pagetaka

写真、PC、ネット、岡山、旅の話題をお届けします

WP Web Scraper:他サイト情報を解析・とりこみしてくれるプラグイン(WP用)

自分でPHPを書こうかと思っていたScrapingのスクリプト…。WordPressなら、すでにプラグイン(plugin、機能追加アプリ)があるのではないかと探してみました。

WP Web Scraper

「WP Web Scraper」というプラグインがありました。
PHPのバージョンに要注意です。5.3.3以上でないと動かないみたいです。爺は、とあるところで試したですが、動かない…という現象にぶちあたり、調べていったら、必要なPHP5.3.3より前の5.2で動いていましたので、さっそくサーバ内の設定でバージョンを上げました。そうしましたら動きました…。

使い方は割りと簡単で、ターゲットになるURLと必要なCSS要素を書き込み、テスト用アイコンをクリックすると、結果が表示されます。

f:id:PageTAKA:20150204113120j:plain

CSSを抽出の目印にする

ここでわかりにくいのが、Queryの書き方です。爺は今回CSSをその対象として考えました。
詳細は、プラグイン作成元の記事(英語)でお確かめください。

CSSで抽出カ所を特定するには、サイト閲覧画面のソースを見るのがとりかかりになりそうです。
例として「旅のブログ」を使ってみます。
ソースを表示すると、

      <h1 class="entry-title">
        <a href="http://tabi.hatenadiary.com/entry/2015/01/30/120342" class="entry-title-link bookmark">2月8日、アンコウ握り寿司限定150食。青森県下風呂漁協</a>
      </h1>

というのが見えました。「class="entry-title"」は、「旅のブログ」の第一面というか、閲覧した際に表示される記事(複数)の見出しに共通してつけてあります。「CSS書式でQueryを設定」ということですから。「.entry-title」を入力し、テストアイコン(TestScrap)をクリックします。
f:id:PageTAKA:20150204115425j:plain
↑すると、記事の見出しがリンク付きで抽出されました。次に、「Shortcode」アイコンをクリックします。

ショートコードを記事などに貼り付ける

f:id:PageTAKA:20150204115541j:plain
ショートコードをコピーし、WordPressの記事(post)などに貼り付け「公開」すると、その結果物が世間に公開される、ということになります。

ショートコードの説明は、下のリンクからどうぞ。

自分のサイトでない場合は、著作権に注意してくださいね

自分が管理運営しているサイトであれば、どのような「引用」「参照」でも問題はないでしょうが、他人様の場合は「著作権」などの問題がありますので、許容範囲での実行が大切です。

CSSにより整序・整列されたサイトであればこそ

このような面倒なことを思いついたのは、RSS/FEEDを配布してないサイトの存在です。RSS/feedは「配布」「利用」が前提という性格があるため、一定の書式に収まりデータ取得も比較的容易です。しかし、それが無い場合は手作業しかないのだろうか、ということで、考えたフリをしつつ、先人の知恵を拝借する、という横着(≒ヨコシマ)をして、サイトの必要部分を取得したいな~と…、ええ、そんなわけであります。

改めて、CSSで整序・整列されたサイトであることが大切だと思いました。CSSを使ってないサイトとなると、記事見出しがどれかわかりにくいのです。人間にわかるということではなく、コンピュータ的とかネット的とかいうことになりますが…。人間だと字が大きいとか、書き出しとの関係で、とかそれなりに書き手の意思を忖度して判断できます。プログラム(スクリプト)的には、見出しなら「.entry-title」というようにCSSで明示してあることが大切だな~と、ええ、改めて思ったのでありました。

現場でかならず使われている CSSデザインのメソッド

現場でかならず使われている CSSデザインのメソッド

[追記]HTMLタグも抽出要件に加えることができそうです。

例えば、

<h1 class="midashi">

等という場合、h1.midashi というような指定ができるみたいです。pタグやテーブルタグのTDなどを単独で使っても抽出要件に使えそうです(ただし、狙った通りになるかどうかは別ですが)。

抽出上限を8個にするのであれば lt="8" というような書き方もできるみたいです。いずれも、作者の解説ドキュメントに参考例とともに記載がありました。