webmagic模拟登录方案

  • 方案一:模拟浏览器登录,用代码模拟表单填写,然后获取登陆后的信息,用apache的“HttpClients”进行信息保存。不需要考虑cookie失效问题。
  • 方案二:直接拿去cookie信息,进行设置。可能会用时间限制,超过一定时间就不能再使用了,需要重新设置。
  • 方案一实现:
  • import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.methods.HttpUriRequest;
    import org.apache.http.message.BasicNameValuePair;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    
    import com.wgyscsf.utils.HttpUtils;
    
    
    public class SimulateLoginPolicy1 {
        static boolean result = false;
        public static void main(String[] args) {
            
            loginCsdnPager();
           
            try {
                loginedPager();
            } catch (ClientProtocolException e) {
               
                e.printStackTrace();
            } catch (IOException e) {
                
                e.printStackTrace();
            }
        }
    
       
        private static void loginedPager() throws IOException,
                ClientProtocolException {
           
            HttpUriRequest httpUriRequest = new HttpPost(
                    "http://blog.csdn.net/wgyscsf");
           
            httpUriRequest
                    .setHeader("Accept",
                            "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
            httpUriRequest.setHeader("Accept-Encoding", "gzip,deflate,sdch");
            httpUriRequest.setHeader("Accept-Language", "zh-CN,zh;q=0.8");
            httpUriRequest.setHeader("Connection", "keep-alive");
            // 模拟浏览器,否则CSDN服务器限制访问
            httpUriRequest
                    .setHeader(
                            "User-Agent",
                            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36");
           
            HttpResponse response = HttpUtils.httpClient.execute(httpUriRequest);
            InputStream content = response.getEntity().getContent();
       
            BufferedReader br = new BufferedReader(new InputStreamReader(content));
            String line = "";
            String result = "";
            while ((line = br.readLine()) != null) {
                result += line;
            }
            br.close();
    
            System.out.println(result);
        }
    
        /**
         * 登录页面
         */
        private static void loginCsdnPager() {
            String html = HttpUtils
                    .sendGet("https://passport.csdn.net/account/login?ref=toolbar");// 这个是登录的页面
            Document doc = Jsoup.parse(html);
            // 获取表单所在的节点
            Element form = doc.select(".user-pass").get(0);
           
            String lt = form.select("input[name=lt]").get(0).val();
            String execution = form.select("input[name=execution]").get(0).val();
            String _eventId = form.select("input[name=_eventId]").get(0).val();
    
          
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("username", "wgyscsf@163.com"));
            nvps.add(new BasicNameValuePair("password", "wanggaoyuan"));
            nvps.add(new BasicNameValuePair("lt", lt));
            nvps.add(new BasicNameValuePair("execution", execution));
            nvps.add(new BasicNameValuePair("_eventId", _eventId));
            
            String ret = HttpUtils.sendPost(
                    "https://passport.csdn.net/account/login?ref=toolbar", nvps);
           
            if (ret.indexOf("redirect_back") > -1) {
                System.out.println("登陆成功");
                result = true;
            } else if (ret.indexOf("登录太频繁") > -1) {
                System.out.println("登录太频繁,请稍后再试。。。。。");
                return;
            } else {
                System.out.println("登陆失败。");
                return;
            }
        }
    }
    方案二:使用浏览器的开发者工具将cookie手动加进去
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
WebMagic是一款优秀的Java爬虫框架,可以用来模拟登录微信公众号进行数据采集。 首先,我们需要了解微信公众号的登录方式。微信公众号使用了基于账号密码的登录方式,因此我们需要模拟登录账号密码。 接下来,我们需要使用WebMagic框架进行模拟登录。具体步骤如下: 1. 构建登录表单 使用WebMagic框架可以方便地构建登录表单,例如: ``` FormBody formBody = new FormBody.Builder() .add("username", "your_username") .add("password", "your_password") .build(); ``` 2. 发送登录请求 使用WebMagic框架可以方便地发送登录请求,例如: ``` Request request = new Request.Builder() .url("https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin") .post(formBody) .build(); CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = httpClient.execute(request); ``` 3. 提取登录后的Cookie 登录成功后,我们需要提取Cookie,以便后续的数据采集。使用WebMagic框架可以方便地提取Cookie,例如: ``` List<Cookie> cookies = CookieExtractor.of(response).extractFromHeaders(); ``` 4. 发送数据采集请求 使用WebMagic框架可以方便地发送数据采集请求,例如: ``` Request request = new Request.Builder() .url("https://mp.weixin.qq.com/cgi-bin/appmsg") .cookies(cookies) .build(); httpClient = HttpClients.createDefault(); response = httpClient.execute(request); ``` 5. 解析数据 使用WebMagic框架可以方便地解析数据,例如: ``` Html html = Html.create(response.getEntity().getContent(), Charset.forName("UTF-8")); List<String> titles = html.xpath("//div[@class='news-list']/ul/li/div[2]/h4/a/text()").all(); ``` 以上就是使用WebMagic框架模拟登录微信公众号进行数据采集的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值