人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

自分の作っているFC2ブログの、一番最新の記事だけをPHPでスクレイピングしてホームページに載せようとおもっているのですが、何故か出来ません、

file_get_contentsで取得出来ないのは、クッキーやリファラー、ヘッダ等を見てスクレイピング防止しているのだと思いますが、それでもスクレイピングする方法を教えてください。

具体的なスクリプトを教えていただけた方に、ポイントを御礼したいと思います。

●質問者: maintour15
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Cherenkov
●500ポイント ベストアンサー

普通にできました。rssから最新エントリのurlを取得して、file_get_contentsでソース取得。
文字コードはutf-8で保存。

<?php
function pr($var) {
echo '<pre>'; print_r($var); echo '</pre>';
}
header('Content-Type:text/html; charset=UTF-8');
$feedUrl = 'http://ブログURL.blog99.fc2.com/?xml';
$rss = simplexml_load_file($feedUrl);
$newEntryUrl = (string)$rss->item[0]->link;
$html = file_get_contents($newEntryUrl);
pr($html);

うまくいかないコードとブログURLを提示するといいかもしれません。


追記:
>「全体」の取得はできていました。
>しかしそれをメインの記事部分だけ表示したく、正規表現でentry_bodyなどだけ出力しようとすると、
>どうしても表示出来ないのですが、これはやはりスクレイピング防止という事でしょうか。
抜き出しの処理が間違っているのだと思います。
自分のブログならソースコードも一定(テンプレート書き換えによる変化がない)なので以下のようにすればできました。

<?php
function pr($var) {
echo '<pre>'; print_r($var); echo '</pre>';
}
header('Content-Type:text/html; charset=UTF-8');
$url = 'http://ブログURL.blog99.fc2.com/';
$html = file_get_contents($url);
preg_match('/<div class="entry_body">.+?<div class="content">(.+?)<div class="fc2_footer"/isu', $html, $entryBody);
pr($entryBody[1]);

ミソは正規表現パターンの修飾子でsを使うことかと。


Cherenkovさんのコメント
回答したコードはrss経由で通常のHTMLを取得しています。 最新のエントリだけ取得するためにrssを使いましたけど、トップページのURLだけでhtmlは取得できましたよ。 >|php| <?php function pr($var) { echo '<pre>'; print_r($var); echo '</pre>'; } header('Content-Type:text/html; charset=UTF-8'); $url = 'http://ブログURL.blog99.fc2.com/'; $html = file_get_contents($url); pr($html); ||< ここから正規表現なりdomパーサーなり使って抜き出す。

Cherenkovさんのコメント
追記しました。

Cherenkovさんのコメント
テンプレートによってソースも違うと思うのでうまくいかなかったら適当に書き換えてみてください。

Cherenkovさんのコメント
あと、質問者さんがコメントをしているところは補足欄です。 内容が上書きされてしまうので、コメントは回答の下にあるコメント欄に書くようにしてください。

Cherenkovさんのコメント
これでできました。classのentryのスペルが間違ってます。 >|php| <?php function pr($var) { echo '<pre>'; print_r($var); echo '</pre>'; } header('Content-Type:text/html; charset=UTF-8'); $url = 'http://musicpvfreedownload.blog64.fc2.com/'; $html = file_get_contents($url); preg_match('/(<div class="ently_body">.+?)<!--\/ently_body-->/isu', $html, $entryBody); pr($entryBody[1]); ||<

質問者から

お忙しい中ありがとうございます。
こちらのブログになるのですが、XAMPPでもさくらの共用でも取得が出来ませんでした。
http://musicpvfreedownload.blog64.fc2.com/

大変お手数おかけしますが、宜しくお願い致します。


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ