天天看点

爬虫三:小案例模拟登陆慢慢买并获取用户积分

public class ReptileLogin {

    @Test
    public void Login() throws Exception{
        //确定url:
        String indexUrl = "http://home.manmanbuy.com/login.aspx";
        //2、发送请求,获取数据
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost post = new HttpPost(indexUrl);

        //设置请求参数
        List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
        params.add(new BasicNameValuePair("__VIEWSTATE","/wEPDwULLTIwNjQ3Mzk2NDFkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQlhdXRvTG9naW4voj01ABewCkGpFHsMsZvOn9mEZg=="));
        params.add(new BasicNameValuePair("__EVENTVALIDATION","/wEWBQLW+t7HAwLB2tiHDgLKw6LdBQKWuuO2AgKC3IeGDJ4BlQgowBQGYQvtxzS54yrOdnbC"));
        params.add(new BasicNameValuePair("txtUser","账户名"));
        params.add(new BasicNameValuePair("txtPass","密码"));
        params.add(new BasicNameValuePair("btnLogin","登录"));

        //设置请求头信息
        /*网站加了防盗链,必须设置是从哪个网页跳转过来的*/
        post.setHeader("Referer","http://home.manmanbuy.com/login.aspx");
        post.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36");
        //将参数加入请求体
        HttpEntity entity = new UrlEncodedFormEntity(params);
        post.setEntity(entity);
        //执行
        CloseableHttpResponse response = httpClient.execute(post);

        httpClient.close();

        //判断是否成功跳转
        if(response.getStatusLine().getStatusCode()==302){
            //获取响应头信息
            Header[] locations = response.getHeaders("Location");
            //System.out.println(locations[0].getValue());
            /*跳转之后的url:http://home.manmanbuy.com/usercenter.aspx
            * locations[0].getValue():usercenter.aspx
            * */
            //拼接新的url
            String new_url = "http://home.manmanbuy.com"+locations[0].getValue();
            //拿到响应头中Set-Cookie的值
            Header[] cookies = response.getHeaders("Set-Cookie");

            //重新发送请求,获取数据
            httpClient = HttpClients.createDefault();
            HttpGet get = new HttpGet(new_url);

            //重新设置请求头信息(因为url变,网页重定向,需要手动设置用户cookie信息)
            //Cookie的默认写法,[0]为隐藏,[1]可以直接看到
            get.setHeader("Cookie",cookies[0].getValue()+" "+cookies[1].getValue());

            CloseableHttpResponse execute_info = httpClient.execute(get);
            String info = EntityUtils.toString(execute_info.getEntity(), "gb2312");

            /*-----------------------------------------------------------*/
            //解析数据
            Document parse = Jsoup.parse(info);
            Element element = parse.select("#aspnetForm > div.udivright > div:nth-child(2) > table > tbody > tr > td:nth-child(1) > table:nth-child(2) > tbody > tr > td:nth-child(2) > div:nth-child(1) > font").get(0);
           //输出当前用户账户积分
            System.out.println(element.text());


        }
    }

}