怎么实现利用Java搜索引擎收集网址的程序
我这里讲的不是怎样运用查找引擎,而是怎样让顺序使用查找引擎来搜集网址,这有什么用?很有用!网上动辄有人叫卖网址数据库,如发布软件网址、邮件地址、论坛网址、职业网址,这些网址是怎样来的呢?不能够是人手艺搜集而来的,都是让顺序使用查找引擎取到的,若是您需求某类网址信息数据,就跟我来一同研究一下,十分简略。
本文选用Java言语写成,以谷歌和baidu查找引擎为目标。
咱们要使用谷歌、baidu查找引擎的查找规矩中的两条,要害词查找和inurl查找。什么是inurl查找,就是你所要查找的网址中自身带有的要害词,比方http://www.xxx.com/post.asp ,这个网址就富含post.asp这样的要害词,在查找引擎中填写规矩是 inurl:post.asp,这是搜集网址的要害,因为许多网址自身会带有特定的信息,比方软件发布的网页网址信息中多富含 publish、submit、tuijian这样的信息,如http://www.xxx.com/publish.asp,这样的网址多是发布信息的网页,在联系网页中自身能够富含的要害词,就可以用查找引擎查找出成果,然后咱们使用顺序将成果取回,对HTML页面进行剖析,去掉没有用的信息,将有用的网址信息写入文件或许数据库,就可以给其它应用顺序或许人来运用了。
第一步,用顺序将查找成果取回,先以baidu为例,比方咱们要查找达内软件发布的网页,要害词选用 “软件发布 版别 inurl:publish.asp",先登录baidu看看,将要害词写入,然后提交,在地址栏就会看到 http://www.baidu.com/s?ie=gb2312&bs=%C8%ED%BC%FE%B7%A2%B2%BC+%C8%ED%BC%FE%B0%E6%B1%BE+inurl%3Apublish.asp&sr=&z=&cl=3&f=8&wd=%C8%ED%BC%FE%B7%A2%B2%BC+%B0%E6%B1%BE+inurl%3Apublish.asp&ct=0 ,中文要害词全都变成编码了,没有关系,咱们在顺序中直接用中文也是可以的,其间多个要害词用+号相连,去掉一些没有用的信息,咱们可以把地址优化成http://www.baidu.com/s?lm=0&si=&rn=20&ie=gb2312&ct=0&wd=软件发布+版别+inurl%3Apublish%2Easp&pn=0&cl=0,其间rn表明一页显现多少个成果,wd=表明你要查找的要害词,pn表明从第几条开端显现,这个pn将是咱们顺序循环取成果的变量,每20条循环一次。咱们用Java写的顺序来模仿这个查找的进程,用到的要害类为 java.net.HttpURLConnection,java.net.URL,先写一个提交查找的class,要害代码如下:
class Search
{
public URL url;
public HttpURLConnection http;
public java.io.InputStream urlstream;
......
for(int i=0;i++;i<100)
{
......
try {
url = new URL("http://www.baidu.com/s?lm=0&si=&rn=20&ie=gb2312&ct=0&wd=软件发布+版别+inurl%3Apublish%2Easp&pn="+beginrecord+"&cl=0");
}catch(Exception ef){};
try {
http = (HttpURLConnection) url.openConnection();
http.connect();
urlstream = http.getInputStream();
}catch(Exception ef){};
java.io.BufferedReader l_reader = new java.io.
BufferedReader(new java.io.InputStreamReader(urlstream));
try {
while ((currentLine = l_reader.readLine()) != null) {
totalstring += currentLine;
}
} catch (IOException ex3) {}
....
//本次查找的成果现已放到totalstring中了,是一些HTML代码,需求下一步进行剖析了。
}
再以谷歌为例,略微有些不相同,谷歌对浏览器进行了一些检测,编码也不相同,URL为http://www.谷歌.com/search?q=软件发布+版别+inurl:publish.asp&hl=zh-CN&lr=&newwindow=1&start=0&sa=N&ie=UTF-8,其间编码要用ie=UTF-8,start表明从第几条记载显现,需求注重的是谷歌对浏览器还要查看,若是浏览器不符合它的需求,将回来错误代码,所以在模仿浏览器提交中,咱们要多加一行代码,修正要害有些要将http特点中的User-Agent设置为常用的浏览器,比方Mozilla/4.0,代码如下:
try {
http = (HttpURLConnection) url.openConnection();
http.setRequestProperty("User-Agent", "Mozilla/4.0");
http.connect();
urlstream = http.getInputStream();
}catch(Exception ef){};
第二步,对取回的HTML编码进行剖析,取出其间的有用网址信息,并写入文件或许数据库,因为这些查找引擎都有网页快照和类似网页等网址信息稠浊在HTML中,咱们要将这些网址信息除掉去,除掉的要害就是找出其间的规则,baidu查找引擎中的网页快照和其它没有用的的地址都富含baidu这个要害词,而谷歌中富含的无用网址信息富含要害词 谷歌和cache,咱们就依据这些要害词除掉无用网址信息。在Java中要对字符串进行剖析必定要用到java.util.StringTokenize这个类,用来将字符串以特定的分隔符分隔,java.util.regex.Pattern和java.util.regex.Matcher用来匹配字符串,要害代码如下:
class CompareStr
{
public boolean comparestring(String oristring,String tostring)
{
Pattern p=null; //正则表达式
Matcher m=null; //操作的字符串
boolean b;
p = Pattern.compile(oristring,Pattern.CASE_INSENSITIVE);
m = p.matcher(tostring);
b = m.find();
return b;
}
}
class AnalyUrl
{
......
StringTokenizer token = new StringTokenizer(totalstring,"<> "");
String firstword;
CompareStrcompstr = new CompareStr();
String dsturl = null;
while (token.hasMoreTokens())
{
firstword = token.nextToken();
if (!compstr.comparestring("谷歌.com", firstword) && !compstr.comparestring("cache",firstword))
{
if (firstword.length() > 7)
{
dsturl = firstword.substring(6,firstword.length() - 1);
WriteUrl(dsturl); //成功取到URL,记载到文件中
}
}
}
}
经过以上顺序,咱们就可以搜集到本人要的网址信息了,还可以再写别的一个应用顺序,对搜集到的网址信息进一步剖析,取出本人需求的信息,这里就不再负担,道理都是相同的。最终需阐明一点,谷歌查找引擎查找所能回来的成果不能超越1000条,过了1000条,就直接提示“对不住,Google 为一切查询的成果数都不会超越 1000 个。”,baidu查找引擎回来的成果不能超越700多条,所以咱们要查找时尽能够多加要害词,将成果规模减少。