我想查询以下网站并将所有结果输入到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。
答案 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
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 请求并不适合我