以下是一个简单的Java表单类爬虫的示例代码,使用了jsoup
库来解析HTML。
首先,确保你的项目中包含了jsoup
的依赖。
<!-- 在pom.xml中添加jsoup依赖 -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
然后,使用以下代码实现一个简单的表单提交和数据抓取的爬虫:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class FormCrawler {
public static void main(String[] args) {
String url = "http://example.com/form"; // 表单所在页面的URL
String formUrl = "http://example.com/submitForm"; // 表单提交的目标URL
Map<String, String> formData = new HashMap<>(); // 表单数据
formData.put("username", "user");
formData.put("password", "pass");
try {
// 获取表单的所有数据和提交地址
Document doc = Jsoup.connect(url).get();
String formHtml = doc.select("form").first().html();
Document formDoc = Jsoup.parse(formHtml);
Elements inputElements = formDoc.select("input");
// 填充表单数据
Map<String, String> loginFormData = new HashMap<>();
for (Element inputElement : inputElements) {
String key = inputElement.attr("name");
String value = formData.get(key) != null ? formData.get(key) : "";
loginFormData.put(key, value);
}
// 提交表单
Document submission = Jsoup.connect(formUrl)
.data(loginFormData)
.post();
// 输出抓取结果
System.out.println("提交表单后的结果: \n" + submission.body().html());
} catch (IOException e) {
e.printStackTrace();
}
}
}
这段代码首先使用Jsoup.connect(url).get()
获取表单所在页面的HTML,然后解析出表单的数据和提交地址。接着,使用Jsoup.connect(formUrl).data(loginFormData).post()
方法提交表单,并抓取返回的页面内容。
请注意,实际应用中可能需要处理更复杂的情况,比如处理cookies、处理复杂的表单字段(如隐藏的input、下拉菜单选项等)、处理CSRF tokens等。