ホームページ  >  記事  >  バックエンド開発  >  PHPカールはページとそのオリジンをクロールできませんか?

PHPカールはページとそのオリジンをクロールできませんか?

WBOY
WBOYオリジナル
2016-06-17 08:31:582467ブラウズ

$url = "mp.weixinbridge.com/mp/";
$ch =curl_init();
$timeout = 1;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$contents =curl_exec($ch);
curl_close($ch);
echo $contents;
相対パスのある画像を正常に表示するにはどうすればよいですか?

返信内容:

招待してくれてありがとう、データをキャプチャできない理由は次のとおりです:
1. ヘッダーを書き込んでいません
2. Cookie を書き込んでいません
3. https
には特別な URL 設定がないため、データはキャプチャされませんでした。私が書いたコードを注意深く調べてください。これでデータをキャプチャできます。
これが役に立った場合は、「いいね!」とサポートをお願いします。
<code class="language-text"><?php

	$url = "https://www.zhihu.com/";

	$ch = curl_init();
    // 设置浏览器的特定header
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "Host: www.zhihu.com",
        "Connection: keep-alive",
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Upgrade-Insecure-Requests: 1",
        "DNT:1",
        "Accept-Language: zh-CN,zh;q=0.8,en-GB;q=0.6,en;q=0.4,en-US;q=0.2",
        'Cookie:_za=4540d427-eee1-435a-a533-66ecd8676d7d; __utma=51854390.3169871.1440319332.1441339521.1442067491.5; __utmz=51854390.1442067491.5.5.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmv=51854390.100-1|2=registration_date=20140525=1^3=entry_date=20140525=1; q_c1=efa8c4ccdba04f63a0ba88845f485836|1451394239000|1440047640000; _xsrf=20c250b28098f92459cac05a3944d48d; cap_id="ZWQ5OGIzN2JiZWNmNGRlNGE3YTE1MTE0YTA5YjY1NjE=|1451394239|0efd13fc965c43c0fb6a7a2523b5dac4d1dac7e3"; z_c0="QUFCQXRLa3ZBQUFYQUFBQVlRSlZUY29ScWxZN0k3T1BHaFdqb1JNVlVZekNnZ0trU0xXdEdnPT0=|1451394250|02ed77acc81edbf2340fd0ce1b13618862b3674e"; unlock_ticket="QUFCQXRLa3ZBQUFYQUFBQVlRSlZUZEtMZ2xiM21FNDRmdzdsX1NnOVdieUp3M1VtY0RsaUVBPT0=|1451394250|8cf44cefb523b2973eca01f0918ef97fc03a4994"',
		
		));
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0');
    // 在HTTP请求头中"Referer: "的内容。
    curl_setopt($ch, CURLOPT_REFERER,"https://www.baidu.com/s?word=%E7%9F%A5%E4%B9%8E&tn=sitehao123&ie=utf-8&ssl_sample=normal&f=3&rsp=0");
    curl_setopt($ch, CURLOPT_ENCODING, "gzip, deflate, sdch");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT,120);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//302redirect
    // 针对https的设置
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    $html = curl_exec($ch);
    curl_close($ch);
    if($html === false) {
        echo 'Curl error: ' . curl_error($ch) . "<br>\n\r";
    } else {
		echo $html;
	}
</code>
夏休みにZhihuを這い回って、php+curlを使いました。 Zhihu にはクローラ対策機構があり、ヘッダー、ユーザーエージェント、Cookie などをすべてブラウザーと同じに設定して、ブラウザーに偽装する必要があります。 Chrome の F12 コンソールを上手に活用しましょう。ブラウザのふりをするだけでは十分ではありません。一部の Zhihu ページは gzip で暗号化されているため、gzip を復号するための措置を講じる必要があります。 Zhihu があなたの行動が不審であると判断した場合、Zhihu はさまざまな頻度で空白のページを返します。そのため、データ検証措置を講じる必要があります。一般的に言えば、芝湖に登るのは難しくありませんが、それでも安定して確実に芝湖全体を一度に登ることは非常に困難です。 一部の Web サイトでは、収集を防ぐために、Cookie 情報とヘッダーを可能な限りシミュレートする必要があります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。