使用jsoup查询搜索小部件

时间:2016-04-26 09:02:11

标签: java web-crawler jsoup

我想查询以下网站并将所有结果输入到csv文件中:

  

http://services2.hdb.gov.sg/webapp/BB33RTIS/BB33SSearchWidget

我已经有了一个程序(由前一个程序员编写,我试图理解代码,因为我是jsoup和web抓取的初学者),但现在网站已更新,查询不再有效。我想我需要更新网址。以下是我目前使用的网址字符串:

private final static String URL = "http://services2.hdb.gov.sg/webapp/BB33RTIS/BB33SSearchWidget?"
        + "client=default"
        + "&proxystylesheet=default"
        + "&output=xml_no_dtd"
        + "&Process=continue"
        + "&FLAT_TYPE=%s"
        + "&NME_NEWTOWN=%s"
        + "&NME_STREET="
        + "&NUM_BLK_FROM="
        + "&NUM_BLK_TO="
        + "&AMT_RESALE_PRICE_FROM="
        + "&AMT_RESALE_PRICE_TO="
        + "&DTE_APPROVAL_FROM=%s"
        + "&DTE_APPROVAL_TO=%s";

我这样连接:

Document doc = Jsoup.connect(url).get();

我想更新它以使用新网址。我检查了页面源代码,但找不到它。任何人都可以帮我找到我需要传递的URL。

1 个答案:

答案 0 :(得分:1)

要了解网站的工作方式,您可以打开 Firebug Chrome开发者工具并检查网络流量。在那里,您可以检查通过线路发送的内容(数据, GET POST ,Cookie,...)。

对于此网站,您需要发布数据,但您还需要设置几个Cookie,否则该网站将无法接受您的 POST 请求。您只需先发送 GET 请求并阅读Cookie即可完成此操作:

Response res = Jsoup
    .connect("http://services2.hdb.gov.sg/webapp/BB33RTIS/BB33SSearchWidget")
    .timeout(10000) // edit: set timeout to 10 seconds
    .method(GET)
    .execute();

Map<String,String> cookies = res.cookies();

现在,您可以使用cookies

发送 POST 请求
Document doc = Jsoup
   .connect("http://services2.hdb.gov.sg/webapp/BB33RTIS/BB33SSearchWidget")
   .timeout(10000) // edit: set timeout to 10 seconds
   .data("FLAT_TYPE", "02")
   .data("NME_NEWTOWN", "BD      Bedok")
   .data("NME_STREET", "")
   .data("NUM_BLK_FROM", "")
   .data("NUM_BLK_TO", "")
   .data("dteRange", "12")
   .data("DTE_APPROVAL_FROM", "Apr 2015")
   .data("DTE_APPROVAL_TO", "Apr 2016")
   .data("AMT_RESALE_PRICE_FROM", "")
   .data("AMT_RESALE_PRICE_TO", "")
   .data("Process", "continue")
   .cookies(cookies)
   .post();

并使用doc来搜索搜索结果。

注意:使用网址编码的数据发送 GET 请求并不适合我