当前位置:首页 > Java技术

Java自动登录并抓取网页相关内容

canca14年前 (2012-01-12)Java技术467
JAVA自动登录并抓取内容!!!

package com.taobao.test;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class Test {
public static void main(String[] args) throws Exception {
Map<String,String> loginParams = new HashMap<String,String>();
loginParams.put("username", "xxxx@123.com");
loginParams.put("password", "xxxxx");
loginParams.put("list", "1");
loginParams.put("remuser", "on");
Object[] result = loginWebSize("http://new.cnzz.com/user/login.php", loginParams, null);
showWebInfo("1421407", (Map<String,String>)result[1], "xxxx");
showWebInfo("2842384", (Map<String,String>)result[1], "xxxx");
}
public static void showWebInfo(String webId,Map<String,String>cookies,String webName){
String mainUrl = "http://new.cnzz.com/v1/go_site.php?siteid={WEBID}&s_id=402";
String onlineUrl = "http://new.cnzz.com/v1/main.php?siteid={WEBID}&s=online_list";
Document doc = getUrlDocument(mainUrl.replace("{WEBID}",webId), cookies, "http://new.cnzz.com/v1/main.php?s=site_list", false);
Elements element = doc.select(".gktable tr:gt(1)");
StringBuffer msg = new StringBuffer(webName + "\n");
for(int i = 0 ; i < 2 ; i++){
Elements tdElements = element.eq(i).select("td");
msg.append(i == 0 ? "今日统计\n" : "昨日统计\n");
msg.append("PV:" + tdElements.get(1).text()).append("\n");
msg.append("独立访客:" + tdElements.get(2).text()).append("\n");
msg.append("IP:" + tdElements.get(3).text()).append("\n");
msg.append("新独立访客:" + tdElements.get(4).text()).append("\n");
msg.append("人均浏览次数:" + tdElements.get(5).text()).append("\n\n");
}
doc = getUrlDocument(onlineUrl.replace("{WEBID}",webId), cookies,mainUrl, false);
Elements curOnlineElems = doc.select(".online_d1");
Elements pageViewElems = doc.select(".online_d2");
msg.append(curOnlineElems.select(".num3").html() + ":" + curOnlineElems.select(".num4").html()).append("\n");
msg.append(pageViewElems.select(".num3").html() + ":" + pageViewElems.select(".num4").html()).append("\n");
javax.swing.JOptionPane.showMessageDialog(null,msg.toString(),"CNZZ统计",javax.swing.JOptionPane.YES_OPTION);
}
public static Object[] loginWebSize(String loginUrl,Map<String,String> loginParams,String referrer){
Connection conn = Jsoup.connect(loginUrl);
conn.method(Method.POST).timeout(10000).followRedirects(true);
if(referrer != null && !referrer.equals(""))conn.referrer(referrer);
if(loginParams != null){
Iterator<String> keyIt = loginParams.keySet().iterator();
while(keyIt.hasNext()){
String key = keyIt.next();
conn.data(key,loginParams.get(key));
}
}
try{
Response response = conn.execute();
return new Object[]{response,conn.response().cookies()};
}catch(IOException ex){
ex.printStackTrace();
}
return null;
}
public static Document getUrlDocument(String url,Map<String,String> cookies,String referrer,boolean isPostMethod){
Connection conn = Jsoup.connect(url).timeout(10000).followRedirects(true);
if(referrer != null && !referrer.equals(""))conn.referrer(referrer);
conn.method(isPostMethod ? Method.POST : Method.GET);
setCookies(conn, cookies);
Document doc = null;
try{
doc = isPostMethod ? conn.post() : conn.get();
}catch(IOException ex){
ex.printStackTrace();
}
return doc;
}
/**
* 设置Cookies
* @param conn
* @param cookies
*/
public static void setCookies(Connection conn,Map<String,String>cookies){
if(cookies == null)return;
Iterator<String> it = cookies.keySet().iterator();
while(it.hasNext()){
String key = it.next();
conn.cookie(key, cookies.get(key));
}
}
}

扫描二维码推送至手机访问。

版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

本文链接:https://iant.work/post/183.html

标签: Java技术
分享给朋友:

“Java自动登录并抓取网页相关内容” 的相关文章

对象序列化与反序列化

    序列化,并不是JAVA独有的。因此,在这里我用比较通俗的话说了。序列化就是把一个对象转换成有规则的二进制流。而反序列化就是把有规则的二进制数据重整成一个对象。其好处不难看见:1.可以把一个对象...…

Socket与ServerSocket的问题

//服务器端:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.ServerSock…

IM技术(1)

    做项目了,NetCL今天开工了,在这些日子里,我会将自己研究的内容写下来。做个记录,以下是我在网上搜到的。关于管理用户状态的解决方案,当然,我都有一个方案。不过对客户端的任务有点重吧,我方法是客...…

JAVA内部类终极实例

最近心情不好,不想说太多东西了!电脑坏了,我现在又病了. class ClassFactory{ private final static String userName = "Hello,My name is CAnca."; public static Thread in =…

过滤网页HTML标记

JAVA过滤HTML中的所有标记。非常好用!! package canca.regex; import java.util.regex.Matcher;import java.util.regex.Pattern; public class HtmlFilter {  priva…

Java代理详话简说

        Java的代理,使项目实现低藕合成为可能。Spring框架中的AOP,内部就是用Java代理来实现。因此,认识JAVA代理原理对学习学Spring AOP是有密切关系的。    &nb…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。