📄 main.java
字号:
package spider;
import spider.SaveToDataBase;
import spider.photoOperate;
import spider.PageOperate;
import spider.FormOperate;
import spider.FOperator;
import spider.Form;
import spider.FileOperate;
import java.net.*;
import java.io.*;
import java.util.*;
public class Main
{
public static void main(String[] args) //网页操作,把网页地址和图片地址保存到数据库,并保存网页到文件夹
{
/*
//提交搜索关键字到搜索引擎,保存下一页到数据库表baidu中
//插入第一页url地址
SaveToDataBase std=new SaveToDataBase();//操作数据库类
//std.setSearchWord("图书");
PageOperate MyPageOperate=new PageOperate();
MyPageOperate.setMyUrl("http://www.baidu.com/s?wd=","西游记 出版社");//设置要连接的url地址,设置搜索时的前缀和搜索的关键词
MyPageOperate.setHtml(); //此方法中处用到了私有变量myUrl,从指定的网址取得html字符流设置myHtml
String nextPage=MyPageOperate.nextPageUrl("http://www.baidu.com/", "href=", "下一页"); //返回一个下一页的url地址
String insertOneSql="insert into baidu(myurl) values('"+nextPage+"')";
String selectOneSql="select * from baidu where myurl='"+nextPage+"'";
std.operateInsertOneSql(insertOneSql,selectOneSql);//下一页的url地址插入到数据库baidu表中
//循环插入下一页url地址
for(int nt=0;nt<1;nt++)//可确定具体多少页
{
MyPageOperate.setMyUrl(nextPage);
MyPageOperate.setHtml(); //此方法中处用到了私有变量myUrl,从指定的网址取得html字符流设置myHtml
nextPage=MyPageOperate.nextPageUrl("http://www.baidu.com/", "href=", "下一页"); //返回一个下一页的url地址
insertOneSql="insert into baidu(myurl) values('"+nextPage+"')";
selectOneSql="select * from baidu where myurl='"+nextPage+"'";
std.operateInsertOneSql(insertOneSql,selectOneSql);//下一页的url地址插入到数据库baidu表中
}
//end 提交搜索关键字到搜索引擎,保存下一页到数据库表baidu中
*/
/*
//从baidu表中取出地址,分析下一页,保存到baidu表
//操作baidu表,从baidu表中提取一个url地址,连接地址,并分析网页,从中提取下一页的地址,保存到baidu表中
for(int number=1;number<2;number++)
{
try//出现任何情况都要循环到底
{
int j=number;
SaveToDataBase std=new SaveToDataBase();//操作数据库类
PageOperate MyPageOperate=new PageOperate();//操作页面类
std.setWhichUrl(j);//指定要提取的id号
std.setUrls("baidu");//指定要丛哪个表提数据
String myUrl= std.outPutOneUrl(); //从表中提取一个url地址
MyPageOperate.setMyUrl(myUrl);//设置要连接的url地址
MyPageOperate.setHtml(); //此方法中处用到了私有变量myUrl,从指定的网址取得html字符流设置myHtml
// MyPageOperate.setHtml(); //此方法中处用到了私有变量myUrl,从指定的网址取得html字符流设置myHtml
String nextPage=MyPageOperate.nextPageUrl("http://www.baidu.com/", "href=", "下一页"); //返回一个下一页的url地址nextPageUrl("http://www.google.cn/", "href=", "下一页");//
String insertOneSql="insert into baidu(myurl) values('"+nextPage+"')";
String selectOneSql="select * from baidu where myurl='"+nextPage+"'";
std.operateInsertOneSql(insertOneSql,selectOneSql);//下一页的url地址插入到数据库baidu表中
//循环插入下一页url地址
for(int nt=0;nt<75;nt++)//可确定具体多少页
{
MyPageOperate.setMyUrl(nextPage);
MyPageOperate.setHtml(); //此方法中处用到了私有变量myUrl,从指定的网址取得html字符流设置myHtml
nextPage=MyPageOperate.nextPageUrl("http://www.baidu.com/", "href=", "下一页"); //返回一个下一页的url地址
insertOneSql="insert into baidu(myurl) values('"+nextPage+"')";
selectOneSql="select * from baidu where myurl='"+nextPage+"'";
std.operateInsertOneSql(insertOneSql,selectOneSql);//下一页的url地址插入到数据库baidu表中
}
}
catch(Exception e)
{ System.out.println("循环异常结束"); }
}
System.out.println("----------操作完成");
//end 操作baidu表,从表中提取一个url地址,连接地址,保存网页,并分析网页,从中提取具体网页的地址,保存到
//操作baidu表和urls表,从baidu表中提取一个url地址,连接地址,并分析网页,从中提取具体网页的地址,保存到urls表中
for(int number=1;number<77;number++)
{
try//出现任何情况都要循环到底
{
int j=number;
SaveToDataBase std=new SaveToDataBase();//操作数据库类
PageOperate MyPageOperate=new PageOperate();//操作页面类
std.setSearchWord("牡丹亭");
std.setWhichUrl(j);//指定要提取的id号
std.setUrls("baidu");//指定要丛哪个表提数据
String myUrl= std.outPutOneUrl(); //从表中提取一个url地址
MyPageOperate.setMyUrl(myUrl);//设置要连接的url地址
MyPageOperate.setHtml(); //此方法中处用到了私有变量myUrl,从指定的网址取得html字符流设置myHtml
MyPageOperate.setHttpList("href=");//从httl页面中提取url存放到LIst中,用特定的词splitWord分割网页
std.setUrlList(MyPageOperate.getMyListHttp());
std.saveUrlToDataBase();//把urlList中的符合条件的oneUrl保存到数据库表urls中
System.out.println("操作完第"+j+"个网页");
}
catch(Exception e)
{ System.out.println("循环异常结束"); }
}
System.out.println("----------操作完成");
//end 操作baidu表,从表中提取一个url地址,连接地址,保存网页,并分析网页,从中提取具体网页的地址,保存到
*/
//操作urls表,从表中提取一个url地址,连接地址,并分析网页,查看是否有表单,有则保存网页到指定的文件中,
//从urls表中取出若干个符合条件的Url
String urls_sql="select ID from urls where ID>=5872 and ID<5972 order by ID";//) and zhen=1";
Map IDMap=new HashMap();
List IDList=new ArrayList();
SaveToDataBase IDstd=new SaveToDataBase();//操作数据库类
IDMap=IDstd.selectIDFromUrls(urls_sql);
IDList=(List)IDMap.get("IDList");
Iterator it=IDList.iterator();
while(it.hasNext())
{
int count=0;
try//出现任何情况都要循环到底
{
System.out.println("it"+it.toString());
int number=Integer.parseInt(it.next().toString());//((Integer)it.next()).intValue();
int fileNumber=number;//设置文件数
int j=number;
SaveToDataBase std=new SaveToDataBase();//操作数据库类
PageOperate MyPageOperate=new PageOperate();//操作页面类
FOperator foperator=null;
std.setWhichUrl(j);//指定要提取的id号
std.setUrls("urls");//指定要丛哪个表提数据
String myUrl= std.outPutOneUrl(); //从表中提取一个url地址
if(myUrl.indexOf("bbs")==-1 && myUrl.indexOf("blog")==-1 && myUrl.indexOf("bokee")==-1 && myUrl.indexOf("spaces.live.com")==-1 && myUrl.indexOf(".edu.")==-1 && myUrl.indexOf(".gov")==-1 && myUrl.indexOf(".tw")==-1 && myUrl.indexOf("lib.")==-1 && myUrl.indexOf(".org")==-1 && myUrl.indexOf("news")==-1 && myUrl.indexOf("school")==-1 && myUrl.indexOf(".kongfz.")==-1 && myUrl.indexOf(".taobao.")==-1 && myUrl.indexOf(".sohu.")==-1 && myUrl.indexOf(".sina.")==-1)
{
System.out.println(j+"------"+myUrl);
MyPageOperate.setMyUrl(myUrl);//设置要连接的url地址
MyPageOperate.setHtml(); //此方法中处用到了私有变量myUrl,从指定的网址取得html字符流设置myHtml
if(MyPageOperate.hasForm())//如果网页中含有有表单
{
count++;
String sqlSelect="select * from keywordinsearchinterface";//取出表中的关键字,如书名,出版社
foperator=new FOperator(MyPageOperate.getHtml(),std.selectOneForm(sqlSelect));
if(foperator.isDeepWebSearchInteface())////判断form表单中是否有书名,作者等关键字,如果有则可能是图书接口
{
sqlSelect="select * from serviceinpage";//取出表中的关键字
foperator.setKeyWordInForm(std.selectOneForm(sqlSelect));
if(foperator.isPagehasbook())//判断页面中有购物车,支付等服务信息
{
String address="E:\\test\\xiyouji3_page4\\";//保存文件的地址 有搜索接口下面就改变保存地址,没有就用这个地址
MyPageOperate.setMyAddress(address); //设置保存网页的文件地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -