java - Jsoup 发布修改后的文档

标签 java screen-scraping jsoup

我正在尝试为我即将推出的 Android 应用程序创建一个网络抓取工具。因此,我需要在网站上使用一个简单的搜索表单,填写该表单并将结果发送回服务器。

Jsoup-Cookbook 中所述,我从服务器上抓取了我需要的站点并更改了值。

现在我只需要将修改后的文档发布回服务器并抓取结果页面。 据我在 Jsoup-API 中看到的,除了 Jsoup.connection 中的 .data-Attribute 之外,没有办法回发某些内容,不幸的是它无法填写文本字段通过他们的 ID。

有什么想法或解决方法吗?如何将修改后的文档或其部分发布回网站?

最佳答案

您似乎误解了 HTTP 的一般工作原理。带有修改后的输入值的整个 HTML 文档并不从客户端发送到服务器。更重要的是,所有输入元素的名称=值对都作为请求参数发送。然后服务器将返回所需的 HTML 响应。

例如,如果您想在 Jsoup 中模拟提交以下表单(您可以通过在浏览器中打开带有表单的页面并右键单击来找到确切的 HTML 表单语法,查看源代码)

<form method="post" action="http://example.com/somescript">
    <input type="text" name="text1" />
    <input type="text" name="text2" />
    <input type="hidden" name="hidden1" value="hidden1value" />
    <input type="submit" name="button1" value="Submit" />
    <input type="submit" name="button2" value="Other button" />
</form>

那么您需要按如下方式构建请求:

Document document = Jsoup.connect("http://example.com/somescript")
    .data("text1", "yourText1Value") // Fill the first input field.
    .data("text2", "yourText2Value") // Fill the second input field.
    .data("hidden1", "hidden1value") // You need to keep it unmodified!
    .data("button1", "Submit")       // This way the server knows which button was pressed.
    .post();

// ...

在某些情况下,您还需要发回 session cookie,但这是一个独立的主题(并且这个问题之前已经被问过多次;一般来说,使用真正的 HTTP 客户端更容易并通过 Jsoup#parse() 传递其响应。

另请参阅:

关于java - Jsoup 发布修改后的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8986617/

相关文章:

java - 使用线程 : Android 的 Sqlite 数据库锁定问题

垃圾内存支持的java编码标准

java - 如何使用自动化测试 Google 购买对话框?

c# - 使用 htmlagilitypack 选择具有特定文本值的节点

java - 提取 HTML <br> 标签中的文本 JSOUP

java - 使用 RBroker Java 部署 R

php - 修改抓取网页中包含的 JavaScript 的最佳方法是什么?

html - 使用 getelementbyID 时如何隔离多个 innertext 条目

java - jsoup 白名单放松模式对于所见即所得编辑器来说过于严格

java - 如何使用jsoup删除html文件开头的 header ?