【问题标题】:Alternative to PHP/cURL scripts: web automation?PHP/cURL 脚本的替代方案:网络自动化?
【发布时间】:2012-10-20 22:56:49
【问题描述】:

我正在尝试使用 PHP 和 cURL 创建一个脚本,用于提取 this 页面中显示的电子邮件。

我无法获取它们,因为酒店列表是通过 ajax 调用加载的..

好吧,我的问题是:PHP/cURL 脚本的替代方案是什么?也许像 Selenium、Sahi 或 Watir 之类的工具(这些是用于测试的)允许打开浏览器???

Linux 用户。

编辑:

在牧师的回答之后,我想在这里粘贴我的代码,我用它来获取包含第一页酒店数据的 xml 文件,但我想访问其余酒店所在的页面是……怎么办?

<?php

//extract data from the post
extract($_POST);

//set POST variables
$url = 'http://www.turismovenezia.it/index.php';

$fields1 = array(
            'ajax'=>'searchEngineTopdata',
            'next_pair'=>'Dove Allogiare|*',
            'lang'=>'it');


$fields2 = array(

'ajax'=>'xmlSearchEngineResponder',
'xml' => "%3C%3Fxml%20version%3D%221.0%22%3F%3E%3CSearchRequest%20xmlns%3D%22http%3A%2F%2Fwww.liberologico.com%2Fdbsite%2Fjolly-search%22%20xmlns%3Axsi%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance%22%3E%3CSearch%3E%3CScope%3E%3C%21%5BCDATA%5B%2A%5D%5D%3E%3C%2FScope%3E%3CFilters%3E%3CFilters%20xsi%3Atype%3D%22FilterSpecType%22%3E%3CField%3Eaptve_territorio%3C%2FField%3E%3CValue%3E%3CSingleValue%3E%3C%21%5BCDATA%5B%2A%5D%5D%3E%3C%2FSingleValue%3E%3C%2FValue%3E%3CMode%3ETHESAURUS%3C%2FMode%3E%3COperation%3ELIKE%3C%2FOperation%3E%3C%2FFilters%3E%3CFilters%20xsi%3Atype%3D%22FilterSpecType%22%3E%3CField%3Efull_text_search%3C%2FField%3E%3CValue%3E%3CSingleValue%3E%3C%21%5BCDATA%5B%2A%5D%5D%3E%3C%2FSingleValue%3E%3C%2FValue%3E%3CMode%3EFREE_TEXT%3C%2FMode%3E%3COperation%3ELIKE%3C%2FOperation%3E%3C%2FFilters%3E%3CFilters%20xsi%3Atype%3D%22FilterSpecType%22%3E%3CField%3Elang%3C%2FField%3E%3CValue%3E%3CSingleValue%3E%3C%21%5BCDATA%5Bit%5D%5D%3E%3C%2FSingleValue%3E%3C%2FValue%3E%3CMode%3EFREE_TEXT%3C%2FMode%3E%3COperation%3EEQUAL%3C%2FOperation%3E%3C%2FFilters%3E%3C%2FFilters%3E%3CSubSearches%3E%3CSearch%3E%3CScope%3E%3C%21%5BCDATA%5BEventi%5D%5D%3E%3C%2FScope%3E%3C%2FSearch%3E%3CSearch%3E%3CScope%3E%3C%21%5BCDATA%5BArte%20%26%20Cultura%5D%5D%3E%3C%2FScope%3E%3C%2FSearch%3E%3CSearch%3E%3CScope%3E%3C%21%5BCDATA%5BMare%20%26%20Natura%5D%5D%3E%3C%2FScope%3E%3C%2FSearch%3E%3CSearch%3E%3CScope%3E%3C%21%5BCDATA%5BPiatti%20%26%20Prodotti%20tipici%5D%5D%3E%3C%2FScope%3E%3C%2FSearch%3E%3CSearch%3E%3CScope%3E%3C%21%5BCDATA%5BRelax%20%26%20Divertimento%5D%5D%3E%3C%2FScope%3E%3C%2FSearch%3E%3CSearch%3E%3CScope%3E%3C%21%5BCDATA%5BDove%20Alloggiare%5D%5D%3E%3C%2FScope%3E%3C%2FSearch%3E%3CSearch%3E%3CScope%3E%3C%21%5BCDATA%5BDove%20Mangiare%5D%5D%3E%3C%2FScope%3E%3C%2FSearch%3E%3CSearch%3E%3CScope%3E%3C%21%5BCDATA%5BInformazioni%20Utili%5D%5D%3E%3C%2FScope%3E%3C%2FSearch%3E%3C%2FSubSearches%3E%3C%2FSearch%3E%3CActiveResultSet%3E%3CTab%3E%3C%21%5BCDATA%5BDove%20Alloggiare%5D%5D%3E%3C%2FTab%3E%3CFirstItem%3E0%3C%2FFirstItem%3E%3CPagerSize%3E10%3C%2FPagerSize%3E%3C%2FActiveResultSet%3E%3C%2FSearchRequest%3E",
'force' => 'false');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields2);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

//execute post
$result = curl_exec($ch);

echo $result;

//close connection
curl_close($ch);

【问题讨论】:

    标签: php curl


    【解决方案1】:

    该列表是由来自http://www.turismovenezia.it/index.php 的 POST 请求拉取的 XML 列表。 cURL 是,IMO,您执行此操作的最佳工具。使用开发人员的控制台。遵循网站如何发起和满足请求,然后模仿它。

    RAW POST using cURL in PHP

    【讨论】:

    • 谢谢,我正在尝试,但这对我来说并不容易......我已经粘贴了我在问题中使用的代码。有人想帮我一把吗?
    【解决方案2】:

    您可能不会接受这个答案,但也许社区会。您需要听到的答案是:不要从网页中提取电子邮件。

    无论您想向这些地址推广什么,您都不想向他们发送未经请求的电子邮件。这既会惹恼这些人,也会导致您的电子邮件被提交给 SpamCop 或其他垃圾邮件黑名单。这也是非常粗鲁的行为。

    不,电子邮件是“仅限一次”还是您提供“退出说明”都没有关系。

    尝试联系网站本身寻求帮助。他们可能有一个论坛供您发布您的消息,或者他们可能会代表您转发(实际上不给您电子邮件数据库)。

    【讨论】:

      【解决方案3】:

      看看 simple_html_dom 库

      http://simplehtmldom.sourceforge.net/

      更简单的方式来加载 DOM 并使用 PHP 进行操作

      【讨论】:

        猜你喜欢
        • 2012-09-14
        • 1970-01-01
        • 2021-07-15
        • 2011-05-24
        • 2018-02-19
        • 1970-01-01
        • 2020-09-07
        • 2012-01-11
        • 2012-04-06
        相关资源
        最近更新 更多