我正在尝试为即将推出的Android应用创建一个网络抓取工具。因此,我需要在网站上使用简单的搜索表单,填写并将结果发送回服务器。
如Jsoup-Cookbook中所述,我从服务器上删除了我需要的网站并更改了值。
现在我只需要将修改后的文档发回服务器并抓取生成的页面。
就我在Jsoup-API中看到的那样,除了在Jsoup.connection中使用.data-Attribute
之外,没有办法发回一些东西,遗憾的是,它不能用它们的id填写文本字段。
任何想法或解决方法,如何将修改后的文档或其部分发布回网站?
答案 0 :(得分:4)
您似乎误解了HTTP的工作原理。具有修改的输入值的整个 HTML文档不是从客户端发送到服务器的。更重要的是,所有输入元素的name = value对都作为请求参数发送。然后服务器将返回所需的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();
// ...
在某些情况下,您还需要重新发送会话cookie,但这是一个独立的主题(以及之前已经多次询问的问题;一般来说,使用真正的HTTP客户端更容易并通过Jsoup#parse()
)传递其回复。
答案 1 :(得分:0)
那不是那样的。您应该创建一个POST请求(使用Apache HTTP Components),获取响应,然后使用JSoup抓取它。