【问题标题】:Is there way to make my code to do some actions in another site and return the results?有没有办法让我的代码在另一个站点中执行一些操作并返回结果?
【发布时间】:2016-10-03 07:36:47
【问题描述】:

我需要做一件不寻常的事情。我需要让我的站点转到另一个站点,在某个输入字段上写一些词,搜索结果并从另一个站点取回该搜索的结果。

有什么办法吗?

【问题讨论】:

  • 其他网站是否有某种 API?
  • 其他站点应该有一个可用的 API 供您实现您想做的事情。
  • 您在标签中提到 web-scraping - 这是您真正想要做的吗?如果是这样,那里有很多网络抓取工具 - 只需搜索即可。
  • 唯一的问题是该站点没有api。
  • 正如@0xDECAFBAD 所说,您可以改用网络抓取。但是,这很容易损坏(如果远程站点更改其 HTML)或阻塞(如果您在其服务器上放置过多负载,他们可能会拒绝来自您 IP 范围的请求)。

标签: javascript php web-scraping keyword


【解决方案1】:

如果您需要自动化工具,则必须编写脚本。使用 PHP,您可以使用 cURL。使用 cURL,您可以将数据发布到表单中并根据需要获取内容。例如,您可以发布数据:

curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);

http://php.net/manual/en/book.curl.php

【讨论】:

    【解决方案2】:

    使用 API

    对于这样的事情,通常应该有一个 API 来处理您正在尝试做的事情。

    如果不是这种情况,请检查以下选项并确保网站所有者允许您做您想做的事(或者如果您造成过多流量或他不喜欢网络,您可能会被阻止-一般刮)

    使用直接 HTTP 请求

    Web 表单基本上只是一种将 HTTP 请求“构建”到某个端点的方式。查看网站的 HTML 以了解请求是如何创建的:

    • 检查目标网址的表单标签的“action”属性。
    • 通过检查表单标签“method”属性的值来获取HTTP方法
    • 通过检查所有输入标签的名称属性来获取参数名称。

    如果他们更改网站,这些值可能会改变,您的程序可能会失败。

    您可以使用 cURL 或任何其他 HTTP 库来执行此操作。

    使用模拟网络浏览器的库

    示例:Symfony Browser-Kit

    我不想提供如何使用它的完整手册,因为链接页面上的文档非常好。但取自该页面的示例:

    use Acme\Client; // Make sure to create this class as described in the documentation
    
    // make a real request to an external site
    $client = new Client();
    $crawler = $client->request('GET', 'https://github.com/login');
    
    // select the form and fill in some values
    $form = $crawler->selectButton('Log in')->form();
    $form['login'] = 'symfonyfan';
    $form['password'] = 'anypass';
    
    // submit that form
    $crawler = $client->submit($form);
    

    如果他们更改网站,这也可能会失败,具体取决于他们所做的更改。您需要相应地更新您的程序。

    【讨论】:

      猜你喜欢
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      相关资源
      最近更新 更多