【问题标题】:issue when scraping website using curl php使用 curl php 抓取网站时的问题
【发布时间】: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


【解决方案1】:

我不会宽恕你所做的任何事情,因为这似乎违反了他们的政策 - 在这里找到他们的 API:https://developer-tripadvisor.com/content-api/description/

话虽如此,如果您愿意进行一些额外的解析......您可以尝试以下作为起点(提示:使用 get 按原样返回页面并手动编写规则来解析它)

    <?php

        $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_GET,1);
          //curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($postfields));
          $response = curl_exec($ch);
          curl_close($ch);
          echo "<pre><!--";//remove this(and below) and do whatever you want with the result page
          var_dump($response);
          echo "--></pre>";
    ?>

【讨论】:

  • 感谢我使用我的第一个代码从另一个网站获取数据
猜你喜欢
  • 2015-03-30
  • 2018-08-09
  • 1970-01-01
  • 2015-09-14
  • 2012-03-09
  • 2012-12-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多