【发布时间】:2018-04-16 21:06:36
【问题描述】:
我想从网站 TripAdvisor 获取城市 Al Riyad 的所有酒店名称,这是我的代码:
require_once(APPPATH."../simple_html_dom.php");
$postfields = array(
"sl_opp_json" => "%7B%22HOTELS_AB_SLOT_0%22%3A%22eb6ce073-5ea4-4182-ab18-9d656fe9bbc5%22%2C%22HOTELS_SLOT_0%22%3A%225c1f95f2-50aa-4c1b-89ea-f957ea5607fd%22%7D",
"plSeed" => "845179989",
"showSnippets" =>"false",
"offset" =>"120",
"reqNum" =>"2",
"changeSet" =>"",
"puid" =>"WtT-4QoQJX8AAmsw3QgAAABC"
);
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,"https://www.tripadvisor.fr/Hotels-g293995-Riyadh_Riyadh_Province-Hotels.html");
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($postfields));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
但是 $response 的结果给我这个消息:
“Votre requête n'est pas valide。谢谢你的使者 une requête HTTP 验证。”
“您的请求无效,请发送有效的 HTTP 请求。”
谁能帮忙。提前致谢。
【问题讨论】:
-
他们有 API 吗?他们可能不喜欢刮刀。
-
抱歉 smith io 现在不知道他们是否有 API
-
提示,他们确实这样做了.. 以及关于不抓取的规则,.
-
lel,只需执行一个普通的 GET 请求,即可获得所有酒店。此外,您的最后一个 post 参数看起来像一个 CSRF 令牌,并且 CSRF 令牌与特定的 cookie 会话 id 相关联,并且您在这里没有硬编码任何 cookie 会话 id。另外,去掉simple_html_dom,它已经过时了,已经很久了,PHP内置了更好的工具,改用DOMDocument/DOMXPath。
-
添加英文消息以便更好地理解问题,修复常见错误。
标签: php curl web-scraping