【问题标题】:problem in parsing解析中的问题
【发布时间】:2009-10-15 07:03:37
【问题描述】:

我有一个页面,比如 abc.html,它有一个带有一些字段的小表单。

<form name="form" method="post" action="abc.html">.......................</form>

当我们再次提交表单时,它会返回 abc.html 并发布一些数据,并在处理发布数据后的页面上显示结果名称。

在整个过程中,页面 url 保持不变。现在我想在提交表单后解析这个包含数据的 abc.html。我已经完成了解析,其中原始 url 包含所有数据,但不像这样提交后数据显示在页面上。请告诉我如何解析这样的页面??

【问题讨论】:

  • 感谢大家的指导:-D 'curl' 解决了我的问题!

标签: php parsing html-parsing


【解决方案1】:

好吧,要从服务器获取正确的 HTML,您必须发送一个包含表单数据的 POST 请求。然后就可以解析服务器响应了。

【讨论】:

  • 我知道...但是如何通过表单发送请求,然后使用 php 获取结果,我不知道 :-(
  • 我不完全确定我是否理解您的问题以及您想要做什么,但您知道您可以通过 CURL 发送 POST 请求并从服务器获取响应:php.net/manual/en/book.curl.php ?
【解决方案2】:

解析 HTML 文件和我们看到的一样。因此,在发布数据后呈现的 HTML 页面将包含一些或任何显示附加文本的 HTML 元素。当您解析页面检查是否存在此或容器时,如果存在则读取其余数据。没有发布数据显示的 HTML 页面不会有这个附加或容器。

编辑:看看这个问题:PHP Screen Scraping and Sessions

【讨论】:

  • 但是如何访问包含该附加数据的网址??? url 在整个过程中保持不变
【解决方案3】:

首先。您的页面应该是 abc.php。否则它不会解析任何 php。

第二。这是一些可以帮助您的代码(我希望)。复制/粘贴此示例并将其放在 abc.php 中

<html>
<head></head>
<body>
<?php 
if (isset($_POST['submit'])) {
  echo 'you posted the following value :'.$_POST['foo'];
}
?>
<form name="form" action="abc.php" method="post">
<input type="text" name="foo" value="" />
<input type="submit" name="submit" value="Press Me" />
</form>
</body>
</html>

如果不是这样。并且你想像解析 XML 一样解析 HTML,你应该使用 PHP 的 DOMDocument

$oDom = new DOMDocument();
$oDom->loadHTML($sHTMLstring);
// or 
$oDom->loadHTMLFile($sFileName);
// now you can walk the dom like
$oDomElement = $oDom->getElementByTagName('form');

http://nl.php.net/manual/en/domdocument.loadhtml.php http://nl.php.net/manual/en/domdocument.loadhtmlfile.php http://nl.php.net/manual/en/domdocument.getelementsbytagname.php

希望对你有帮助

【讨论】:

  • 我想你还没有理解我的问题.....我必须解析 abc.html 其中包含在提交特定表单后显示的数据。我想解析提交后的数据形式。
  • 好吧,我不明白。你能详细说明一下吗? abc.html 是生成的吗?应该在哪个页面进行解析?必须解析哪一部分?请提供更多细节
【解决方案4】:

好问题,但我认为 PHP 不可能。我的公司使用 C 语言中非常先进的工具来做到这一点。它只是抓取任何页面并发送任何表单并获取响应 HTML。 但是您可能会找到一些工具。不知道。

【讨论】:

    【解决方案5】:

    我认为这里的重点是您不能只打开 URL 并阅读返回的 HTML。您必须扮演浏览器的角色才能与服务器端表单进行交互。为此,您必须编写自己的代码以 HTTP POST 表单输入数据。对您的 POST 的 HTTP 响应将包含生成的 HTML,然后您可以对其进行解析以获取处理后的结果。

    【讨论】:

      【解决方案6】:

      如果您想将表单发送到 Web 服务器(即首先“填写”它),您需要类似于 Perls WWW::Mechanize 的东西。请参阅this question 了解可能的解决方案。之后,您需要解析生成的页面,这在很大程度上取决于相关站点本身:一个站点可能使用您可以使用正则表达式轻松检索的命名元素,而另一个站点可能不会,这使得获取您的值变得更加困难'有兴趣。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 2010-10-10
        • 2013-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多