[英]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。 我檢查了頁面源,但找不到它。 有人可以幫我找到我需要在此處傳遞的網址嗎?
要弄清楚網站的工作方式,您可以打開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
抓取搜索結果。
注意:發送帶有URL編碼數據的GET請求對我不起作用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.