jsp小偷程序
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.net.URL"%>
<%
URL url = new URL("http://www.itpub.net");//建立URL对象,并实例化为url,获得要抓取的网页地址
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(),"GB2312"));//建立BufferedReader对象,并实例化为reader,这里的GB2312是要抓取的网页编码格式
while(reader.ready())
{
out.println(reader.readLine());
}
reader.close();
%>
URL url = new URL("http://www.itpub.net");//http://www.itpub.net就是你想抓的网页地址
reader 对象就是读取到该网页的内容,下面是循环输出,你可以进行过滤找到你需要的内容,
小偷程序其实就是远程读取文件
out.println(reader.readLine());
这时你看到的网页内容实际上已经是你本机的代码了,而不是itpub上的主页了,图片显示不出来就是这个原因,现在就好办了,它的代码你都得到了,那么你想要什么东东就可以把它找出来了
LZ说实时更新,那你加个定时器好了,比如一个小时检查一次,检查是否和上次检查时内容一样,如果不一样就抓取下来
------------------------------------------------------------------------------------------------------------------------------------------------
String regex="a//s*href//s*=/"//s*([^/"]*)//s*/"[^>]*>([^<]*)//s*<///a>";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
while(m.find())
...
...
现写了一个,楼主测试一下试试
----------------------------------------------------------------------------------------------------------------------
呵呵,还没有搞定啊,又给我送分来了,哈哈
直接下载网上的文件
<%@ page import="java.io.*"%>
<%@ page import="java.net.*"%>
<%
int bytesum=0;
int byteread=0;
URL url = new URL("http://www.mob8.cn/baby/photo/paladin/2007314131714Capture-1.jpg");//这里就是要下载的图片,你可以把这个代码写成方法,要下载时调用方法转入这个网址参数就行了
URLConnection conn = url.openConnection();
InputStream inStream = conn.getInputStream();
FileOutputStream fs=new FileOutputStream( "c:/abc.gif");保存的路径,你可以放到任何你想放的地方,你可以用getServletContext().getRealPath("/")来取得网站的根目录
byte[] buffer =new byte[1444];
int length;
while ((byteread=inStream.read(buffer))!=-1)
{
out.println("<DT><B>"+byteread+"</B></DT>");
bytesum+=byteread;
System.out.println(bytesum);
fs.write(buffer,0,byteread);
}
%>
--------------------------------------------------------------------------------------------------
谓的数据采集程序也就是网页小偷程序(大家别骂我哦),写完了来这里发点东西,希望大家有何高见共同研究.
1.在下载数据的开始,有些网站是要登录了才能看到相应的数据,这个就需要我们发送登录用户名和密码了,但我是登录了,但他服务器也不是垃圾,在他那里重定向了,共产生了2个SESSION,这第2个SESSION我就不知道如何捕抓.于是我就投机^-^,用软件将SESSION捕抓下来了1个叫Ethereal的软件,用以下代码加入到HTTP请求的头部
WebClient myWebClient = new WebClient();
string sessionkey=textBox78.Text;
string refererurl=textBox77.Text;
myWebClient.Headers.Clear();
myWebClient.Headers.Add("Cookie",sessionkey);
myWebClient.Headers.Add("Referer", refererurl);
myWebClient.Headers.Add("User-agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031107 Debian/1.5-3");
这样就欺骗了服务器了,哈哈
2.第二部就是代码下载
byte[] myDataBuffer = myWebClient.DownloadData(remoteUri);
download = Encoding.Default.GetString(myDataBuffer);
3.第3部就是数据的匹配了,我是将流读取到数据里,然后用IndexOf得到2个关键字段的位置,然后用Substring取出来的,我知道这很笨,但用正则表达式难啊(谁会的指点我下),匹配完了得到的字符串我就用以下的函数去掉了HTML代码:
private string StripHTML(string strHtml)
{
string [] aryReg ={
@"<script[^>]*?>.*?</script>",
@"<(///s*)?!?((/w+:)?/w+)(/w+(/s*=?/s*(([""'])(//[""'tbnr]|[^/7])*?/7|/w+)|.{0})|/s)*?(///s*)?>",
@"([/r/n])[/s]+",
@"&(quot|#34);",
@"&(amp|#38);",
@"&(lt|#60);",
@"&(gt|#62);",
@"&(nbsp|#160);",
@"&(iexcl|#161);",
@"&(cent|#162);",
@"&(pound|#163);",
@"&(copy|#169);",
@"&#(/d+);",
@"-->",
@"<!--.*/n"
};
string [] aryRep = {
"",
"",
"",
"/"",
"&",
"<",
">",
" ",
"/xa1",//chr(161),
"/xa2",//chr(162),
"/xa3",//chr(163),
"/xa9",//chr(169),
"",
"/r/n",
""
};
string newReg =aryReg[0];
string strOutput=strHtml;
for(int i = 0;i<aryReg.Length;i++)
{
Regex regex = new Regex(aryReg[i],RegexOptions.IgnoreCase );
strOutput = regex.Replace(strOutput,aryRep[i]);
}
strOutput.Replace("<","");
strOutput.Replace(">","");
strOutput.Replace("/r/n","");
return strOutput;
}
4.到了后面就是入库了,这个大家都懂了吧.但是我还有点问题就是,在我写数据的时候,出了EXCEPTION,说我的字段太长了,不能写进到数据库,我用的是ACCESS,我试验下用SQL吧.