网页数据抓取解析(难题)

kleen 发布于 2016/03/16 22:06
阅读 374
收藏 0
朋友咨询我一个问题,我随便答应了, 然后搞起来发现并非想象中那么简单。 step1 打开这个网站: http://www.szcredit.com.cn/web/newIndex.aspx step2 输入 受理号 440306115180944 step3 点击搜索 输入验证码 , 验证码存在cookies里面 。 step4 然后post 请求, 获取 企业名称 , 注册号 ,企业类型 ,成立日期 , 详细资料 ; 测试例子 //使用封装好的httpclient https://github.com/Arronlong/httpclientUtil public class Test { public static void main(String[] args) throws HttpProcessException, IOException { Header[] headers= HttpHeader.custom().cacheControl("no-cache; Expires: -1").connection("keep-alive").host("www.szcredit.com.cn").contentType("application/x-www-form-urlencoded; charset=UTF-8").userAgent("Mozilla/5.0").build(); HttpClientContext context = new HttpClientContext(); CookieStore cookieStore = new BasicCookieStore(); context.setCookieStore(cookieStore); String url = "http://www.szcredit.com.cn/web/newIndex.aspx"; String validCode = "http://www.szcredit.com.cn/web/WebPages/Member/CheckCode.aspx"; HttpConfig config = HttpConfig.custom(); config.headers(headers); CloseableHttpClient httpClient = HCB.custom().timeout(5000).build(); config.client(httpClient); config.context(context); //打开页面 String secondResp = HttpClientUtil.get(config.url(url)); Html secondhtml = new Html(secondResp); System.out.println(secondhtml.xpath("//input[@id='__VIEWSTATE']/@value").get()); //获取验证码图片 // File file = new File("valiCode.png"); // FileOutputStream out = new FileOutputStream(file); // config.url(validCode).out(out); // HttpClientUtil.down(config); // out.flush(); // out.close(); //获取验证码 config.url(validCode); HttpClientUtil.post(config); List cookies = cookieStore.getCookies(); //封装请求参数 HashMap prama = new HashMap(); prama.put("smObj","upGetCheckCode%7CibtnSearch"); prama.put("__EVENTTARGET",""); prama.put("__EVENTARGUMENT",""); prama.put("__VIEWSTATE",secondhtml.xpath("//input[@id='__VIEWSTATE']/@value").get()); prama.put("__VIEWSTATEGENERATOR",secondhtml.xpath("//input[@id='__VIEWSTATEGENERATOR']/@value").get()); prama.put("__EVENTVALIDATION",secondhtml.xpath("//input[@id='__EVENTVALIDATION']/@value").get()); prama.put("txtKeyword","440306115180944"); prama.put("lbKeyword",""); prama.put("hfuser",""); prama.put("__ASYNCPOST","true"); prama.put("ibtnSearch.x",44); prama.put("ibtnSearch.y",20); for (Cookie cookie : cookies) { if(cookie.getName().equals("txtCheckCode")){ prama.put("txtCheckCode",cookie.getValue()); } } config.map(prama); config.url("http://www.szcredit.com.cn/web/gspt/newGSPTList.aspx"); String post = HttpClientUtil.post(config); //天雷滚滚 一直不对。 System.out.println(post); } } @红薯
加载中
0
振金直男
振金直男
你代码贴成这样有人看吗
kleen
kleen
其实这个搞定了。我忽略了一个参数,.net 的 viewstate
0
逍遥的小贝
逍遥的小贝

viewstate 怎么获得的?楼主请贴下代码好吗

返回顶部
顶部