我正在开发一个网络抓取工具。
我需要在表单的输入字段中插入一些值(用于搜索)并以编程方式获取结果。表单有一个post方法,操作值为"/SetReviewFilter#REVIEWS"
。
但问题是,当我从网站手动搜索时,网站的网址不会改变。
我认为网页是自我发布的
Here the link of the Webpage
我不知道如何实现这个。但我试过这个
private Document getReviewSearchDocument(Document search,String search_url)
{
//search_url mean the url of that search document I fetched previously
// search means the current document of the webpage
Element input = search.getElementsByClass("ratings_and_types").first();
Element link = input.select("div:nth-child(1) > form ").first();
Document rdocument= null;
if (link !=null) {
System.out.println("form found! on: "+link_value);
} else {
System.out.println("Form not found");
}
Connection connection = Jsoup.connect(search_url + "/SetReviewFilter#REVIEWS").timeout(30 * 1000).ignoreContentType(true).ignoreHttpErrors(true);
try {
Connection.Response resp = connection.execute();
if (resp.statusCode() ==200) {
rdocument = connection.data("q",this.keywords).userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36").execute().parse();
System.out.println("Success: "+ resp.statusCode());
System.out.println("document: "+ rdocument.text().toString());
}
else{
System.out.println("no search match");
}
} catch (IOException e) {
e.printStackTrace();
}
return rdocument;
}
如果有任何机构对此有所了解请分享。
谢谢。
答案 0 :(得分:0)
我尝试了几个替代方案并修改了我的代码以调用 JSOUP POST请求来完成工作。但是由于cookies的问题,我多次失败。我发现,对于这个发布请求它需要将近50个cookie(感谢Chrome控制台)。还有一些我无法填写的cookie,因为这些cookie链接到不同的网站(例如:facebook)。最糟糕的情况是我必须做到这一点请求取决于每个城市的酒店数量。所以有时它可能高达85 000,所以这将是昂贵的过程。( - 5我没有看到即将到来)
我在Java中使用Selenium通过Web Automation重建项目。表单中的搜索变得如此简单。
谢谢!