簡體   English   中英

使用jsoup查詢搜索窗口小部件

[英]Query a search widget using jsoup

我想查詢以下站點,並將所有結果輸入到一個csv文件中:

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

我已經有一個用於此的程序(它是由以前的程序員編寫的,由於我是jsoup和Web爬網的初學者,因此我試圖理解代碼),但是現在該站點已更新,查詢不再起作用。 我想我需要更新URL。 以下是我當前使用的網址字符串:

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。 我檢查了頁面源,但找不到它。 有人可以幫我找到我需要在此處傳遞的網址嗎?

要弄清楚網站的工作方式,您可以打開FirebugChrome開發者工具並檢查網絡流量。 在那里,您可以檢查通過電線發送的內容(數據, GETPOST ,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抓取搜索結果。

注意:發送帶有URL編碼數據的GET請求對我不起作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM