我這里講的不是怎么使用搜索引擎,而是怎么讓程序利用搜索引擎來搜集網(wǎng)址,這有什么用?很有用!網(wǎng)上動(dòng)輒有人叫賣網(wǎng)址數(shù)據(jù)庫(kù),如發(fā)布軟件網(wǎng)址、郵件地址、論壇網(wǎng)址、行業(yè)網(wǎng)址,這些網(wǎng)址是怎么來的呢?不可能是人手工收集而來的,都是讓程序利用搜索引擎取到的,如果您需要某類網(wǎng)址信息數(shù)據(jù),就跟我來一起研究一下,非常簡(jiǎn)單。
本文采用Java語言寫成,以google和百度搜索引擎為對(duì)象。
我們要利用google、百度搜索引擎的搜索規(guī)則中的兩條,關(guān)鍵字搜索和inurl搜索。什么是inurl搜索,就是你所要搜索的網(wǎng)址中本身帶有的關(guān)鍵字,比如http://www.xxx.com/post.asp ,這個(gè)網(wǎng)址就含有post.asp這樣的關(guān)鍵字,在搜索引擎中填寫規(guī)則是 inurl:post.asp,這是收集網(wǎng)址的關(guān)鍵,因?yàn)楹芏嗑W(wǎng)址本身會(huì)帶有特定的信息,比如軟件發(fā)布的網(wǎng)頁(yè)網(wǎng)址信息中多含有 publish、submit、tuijian這樣的信息,如http://www.xxx.com/publish.asp,這樣的網(wǎng)址多是發(fā)布信息的網(wǎng)頁(yè),在結(jié)合網(wǎng)頁(yè)中本身可能含有的關(guān)鍵字,就可以用搜索引擎搜索出結(jié)果,然后我們利用程序?qū)⒔Y(jié)果取回,對(duì)HTML頁(yè)面進(jìn)行分析,去除沒有用的信息,將有用的網(wǎng)址信息寫入文件或者數(shù)據(jù)庫(kù),就可以給其它應(yīng)用程序或者人來使用了。
第一步,用程序?qū)⑺阉鹘Y(jié)果取回,先以百度為例,比如我們要搜索軟件發(fā)布的網(wǎng)頁(yè),關(guān)鍵字采用 “軟件發(fā)布 版本 inurl:publish.asp",先登錄百度看看,將關(guān)鍵字寫入,然后提交,在地址欄就會(huì)看到 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 ,中文關(guān)鍵字全都變成編碼了,沒有關(guān)系,我們?cè)诔绦蛑兄苯佑弥形囊彩强梢缘模渲卸鄠€(gè)關(guān)鍵字用+號(hào)相連,去掉一些沒有用的信息,我們可以把地址優(yōu)化成 http://www.baidu.com/s?lm=0&si=&rn=20&ie=gb2312&ct=0& wd=軟件發(fā)布+版本+inurl%3Apublish%2Easp&pn=0&cl=0,其中rn表示一頁(yè)顯示多少個(gè)結(jié)果,wd=表示你要搜索的關(guān)鍵字,pn表示從第幾條開始顯示,這個(gè)pn將是我們程序循環(huán)取結(jié)果的變量,每20條循環(huán)一次。我們用Java寫的程序來模擬這個(gè)搜索的過程,用到的關(guān)鍵類為 java.net.HttpURLConnection,java.net.URL,先寫一個(gè)提交搜索的class,關(guān)鍵代碼如下:
以下是引用片段:
class Search
{
public URL url;
public HttpURLConnection http;
public java.io.InputStream urlstream;
......
for(int i=0;i++;i <100)
{
......
try {
url = new URL("www.baidu.com/s?lm=0&si=&rn=20&ie=gb2312&ct=0& wd=軟件發(fā)布+版本+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) {}
....
//本次搜索的結(jié)果已經(jīng)放到totalstring中了,是一些HTML代碼,需要下一步進(jìn)行分析了。
}
本文采用Java語言寫成,以google和百度搜索引擎為對(duì)象。
我們要利用google、百度搜索引擎的搜索規(guī)則中的兩條,關(guān)鍵字搜索和inurl搜索。什么是inurl搜索,就是你所要搜索的網(wǎng)址中本身帶有的關(guān)鍵字,比如http://www.xxx.com/post.asp ,這個(gè)網(wǎng)址就含有post.asp這樣的關(guān)鍵字,在搜索引擎中填寫規(guī)則是 inurl:post.asp,這是收集網(wǎng)址的關(guān)鍵,因?yàn)楹芏嗑W(wǎng)址本身會(huì)帶有特定的信息,比如軟件發(fā)布的網(wǎng)頁(yè)網(wǎng)址信息中多含有 publish、submit、tuijian這樣的信息,如http://www.xxx.com/publish.asp,這樣的網(wǎng)址多是發(fā)布信息的網(wǎng)頁(yè),在結(jié)合網(wǎng)頁(yè)中本身可能含有的關(guān)鍵字,就可以用搜索引擎搜索出結(jié)果,然后我們利用程序?qū)⒔Y(jié)果取回,對(duì)HTML頁(yè)面進(jìn)行分析,去除沒有用的信息,將有用的網(wǎng)址信息寫入文件或者數(shù)據(jù)庫(kù),就可以給其它應(yīng)用程序或者人來使用了。
第一步,用程序?qū)⑺阉鹘Y(jié)果取回,先以百度為例,比如我們要搜索軟件發(fā)布的網(wǎng)頁(yè),關(guān)鍵字采用 “軟件發(fā)布 版本 inurl:publish.asp",先登錄百度看看,將關(guān)鍵字寫入,然后提交,在地址欄就會(huì)看到 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 ,中文關(guān)鍵字全都變成編碼了,沒有關(guān)系,我們?cè)诔绦蛑兄苯佑弥形囊彩强梢缘模渲卸鄠€(gè)關(guān)鍵字用+號(hào)相連,去掉一些沒有用的信息,我們可以把地址優(yōu)化成 http://www.baidu.com/s?lm=0&si=&rn=20&ie=gb2312&ct=0& wd=軟件發(fā)布+版本+inurl%3Apublish%2Easp&pn=0&cl=0,其中rn表示一頁(yè)顯示多少個(gè)結(jié)果,wd=表示你要搜索的關(guān)鍵字,pn表示從第幾條開始顯示,這個(gè)pn將是我們程序循環(huán)取結(jié)果的變量,每20條循環(huán)一次。我們用Java寫的程序來模擬這個(gè)搜索的過程,用到的關(guān)鍵類為 java.net.HttpURLConnection,java.net.URL,先寫一個(gè)提交搜索的class,關(guān)鍵代碼如下:
以下是引用片段:
class Search
{
public URL url;
public HttpURLConnection http;
public java.io.InputStream urlstream;
......
for(int i=0;i++;i <100)
{
......
try {
url = new URL("www.baidu.com/s?lm=0&si=&rn=20&ie=gb2312&ct=0& wd=軟件發(fā)布+版本+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) {}
....
//本次搜索的結(jié)果已經(jīng)放到totalstring中了,是一些HTML代碼,需要下一步進(jìn)行分析了。
}

