【问题标题】:Programmatic Form Submit程序化表单提交
【发布时间】:2008-12-26 12:54:27
【问题描述】:

我想抓取网页的内容。内容是在该网站上的表格填写并提交后生成的。

我已阅读有关如何抓取最终结果内容/网页的信息 - 但如何以编程方式提交表单?

我正在使用 python 并且已阅读我可能需要获取带有表单的原始网页,对其进行解析,获取表单参数,然后执行 X?

谁能指出正确的方向?

【问题讨论】:

标签: python forms screen-scraping submit


【解决方案1】:

使用python,我认为需要以下步骤:

  1. 解析包含表单的网页,找出表单提交地址和提交方法(“post”或“get”)。

this explains form elements in html file

  1. 使用 urllib2 提交表单。您可能需要一些函数,如 urllib 中的“urlencode”、“quote”来为 post 方法生成 url 和数据。阅读图书馆文档了解详情。

【讨论】:

    【解决方案2】:

    您需要生成一个包含表单数据的 HTTP 请求。

    表单将如下所示:

    <form action="submit.php" method="POST"> ... </form>
    

    这告诉你请求的 url 是 www.example.com/submit.php 并且你的请求应该是一个 POST。

    在表单中会有几个输入项,例如:

    <input type="text" name="itemnumber"> ... </input>
    

    您需要创建一个包含所有这些输入名称=值对的字符串,该字符串为附加到您请求的 URL 末尾的 URL 编码,现在变为 www.example.com/submit.php?itemnumber=5234&otherinput=othervalue 等... 这对 GET 很有效。 POST 有点棘手。

    </motivation>
    

    只需点击 S.Lott 的链接,即可获得更易于使用的库支持:P

    【讨论】:

      【解决方案3】:

      从一个类似的问题 - options-for-html-scraping - 你可以了解到在 Python 中你可以使用 Beautiful Soup

      Beautiful Soup 是一个 Python HTML/XML 解析器,专为屏幕抓取等快速周转项目而设计。三个功能使它变得强大:

      1. Beautiful Soup 不会因为你的错误标记而窒息。它会生成一个解析树,其意义与您的原始文档大致相同。这通常足以收集您需要的数据并逃跑。
      2. Beautiful Soup 提供了一些用于导航、搜索和修改解析树的简单方法和 Pythonic 习惯用法:用于剖析文档和提取所需内容的工具包。您不必为每个应用程序创建自定义解析器。
      3. Beautiful Soup 自动将传入文档转换为 Unicode,将传出文档自动转换为 UTF-8。您不必考虑编码,除非文档未指定编码并且 Beautiful Soup 无法自动检测编码。然后你只需要指定原始编码。

      不寻常的名字caught the attention of our host,2008 年 11 月 12 日。

      【讨论】:

        【解决方案4】:

        您可以使用 javascript 来实现。如果表格是这样的:

        <form name='myform' ...
        

        然后你可以在javascript中做到这一点:

        <script language="JavaScript">
        function submitform()
        {
        document.myform.submit();
        }
        </script> 
        

        您可以使用链接或按钮的“onClick”属性来调用此代码。要在加载页面时自动调用它,请使用元素的“onLoad”属性:

        <body onLoad="submitform()" ...>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多