25

スクレイピング用のコンテンツを作成したパートナーがいます。
ブラウザでページにアクセスできますが、ユーザーにアクセスしようとするとfile_get_contents403 forbidden.

を使用してみましstream_context_createたが、それは役に立ちません。そこに何を入れるべきかわからないためかもしれません。

1) データをスクレイピングする方法はありますか?
2) 「いいえ」の場合、およびパートナーがサーバーを構成してアクセスを許可することを許可されていない場合、どうすればよいですか?

私が使ってみたコード:

$opts = array(
  'http'=>array(
    'user_agent' => 'My company name',
    'method'=>"GET",
    'header'=> implode("\r\n", array(
      'Content-type: text/plain;'
    ))
  )
);

$context = stream_context_create($opts);

//Get header content
$_header = file_get_contents($partner_url,false, $context);
4

4 に答える 4

42

これはスクリプトの問題ではなく、パートナーの Web サーバー セキュリティの機能です。

何があなたをブロックしているのかを正確に言うのは難しいです。おそらく、スクレイピングに対するある種のブロックです。パートナーが自分の Web サーバーのセットアップにアクセスできる場合は、特定に役立つ可能性があります。

標準の Web ブラウザーを模倣するようにユーザー エージェント ヘッダーを設定することで、「Web ブラウザーを偽装」することができます。

これを行うには cURL をお勧めします。これを行うための適切なドキュメントを簡単に見つけることができます。

    // create curl resource
    $ch = curl_init();

    // set url
    curl_setopt($ch, CURLOPT_URL, "example.com");

    //return the transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');

    // $output contains the output string
    $output = curl_exec($ch);

    // close curl resource to free up system resources
    curl_close($ch); 
于 2012-07-27T02:44:40.790 に答える
27

//最初にユーザー エージェントを設定します

ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0)'); 
于 2012-07-27T03:04:14.003 に答える
0

スペースなどの特殊文字を含む URI を開く場合は、URI を urlencode() でエンコードする必要があります。また、fopen ラッパーが有効になっています。

于 2012-07-27T02:50:08.977 に答える