独自の検索エンジンを持っていることは多くの人々のアイデアですが、どうすれば独自の検索エンジンを持つことができますか?これで、編集者は、現在の一般的なデータ収集方法を使用して独自の検索エンジンを実装する方法を教えます。それでは、独自の検索エンジンを構築する方法を見てみましょう。
1. Baidu検索を理解してください
世界最大の中国の検索エンジンであるBaidu Searchは、2005年8月5日に米国のNASDAQにリストされました。現在、中国で最高のユーザー使用率を持つ検索エンジンであり、Webページ、ニュース、写真、音楽、地図などのさまざまな検索を提供しています。
1。Baidu Web検索のクエリパラメーター
必要なパラメーター
☆wd--キーワードfor query(keyword)
☆PN-結果を示すページの数(pageNumber)
☆CL-検索タイプ(クラス)、Cl = 3はWeb検索です
オプションのパラメーター
☆RN-検索結果の数(RecordNumber)、値範囲は10〜100の間で、デフォルト設定はRN = 10です
☆IE-入力テキストのエンコード(inputEncoding)のエンコード、デフォルトの設定はIE = GB2312であり、これは中国語を簡素化されています
tn-検索要求を送信するためのソースサイト
いくつかの有用なTNS
TN = Baidulocalとは、Baiduサイトで検索することを意味します。返された結果は非常にきれいで、広告干渉はありません。たとえば、バイドゥで幸せを検索して、結果が爽やかであるかどうかを確認します。
TN = BaiducnnicはBaiduをフレームワークに入れたいですか?このパラメーターを試してみてください、それはcnnicのためにBaiduによってカスタマイズされています
☆si-限られたドメイン名での検索。たとえば、SinaのWebサイトで検索する場合は、パラメーターsi = sina.com.cnを使用できます。このパラメーターを効果的にするには、CTパラメーターと組み合わせて使用する必要があります。
ct-このパラメーターの値は、一般に一連の数字であり、検索要求の検証コードと推定されます。
たとえば、sina.com.cnで理想を検索するなど、siとctパラメーターを組み合わせて使用します。
bs BS-最後の検索のキーワード(Beforesearch)。これは、関連する検索に関連していると推定されています。
2。Baidu検索結果ページ構造
ソースコード構造によると、トップダウンは次のとおりです。
検索ボックス
右側のホットエリアの固定ランキング
検索結果
ページネーションエリア
関連検索
下の検索ボックス
著作権エリア
検索結果とページネーションエリアは、必要な有効なデータです。コードの結果によると、その一意の文字列識別子を見つけることができます。この識別子を使用して、コンテンツを傍受してください。詳細については、次のコードをご覧ください。
2。ASPを使用したコア関数 - XMLHTTPコンポーネント
一般的に泥棒プログラムとして知られているデータ収集プログラムは、このXMLHTTPコンポーネントの中核部分です。 xmlhttpを使用してデータを収集するのは少し古風なものであり、オンライン情報もたくさんあります。一般的に、コレクションコードはです
setthttp = server.createObject(msxml2.xmlhttp)
http.openget、url、false'open xmlhttp
http.send() 'リクエストを送信します
ifhttp.ReadyState <> 4then
exitFunction
endif
gethttppage = bytestobstr(http.responsebody、gb2312) '結果(通常はバイトストリーム)を返し、バイトストリームを文字列に変換します
setthttp = Nothing'Release xmlhttp
詳細なアプリケーションについては、以下の完全なコードを参照してください
3。完全なコード(ファイル名:searchi_bd.asp)
<%
optionexplicit
dimwd、pn
WD =リクエスト(WD)
pn = request.querystring(pn)
'エラー処理を開始します
onerrorresumenext
iferr.Number <> 0then
Response.Clear
'ユーザーにエラーメッセージを表示します
respons.write <palign = 'center'> <fontsize = 3>、もう一度Baidu検索を開いてください。</font> </p>があります。
endif
%>
<html>
<head>
<title> baidu検索 - <%= wd%> </title>
</head>
<styletype = text/css>
<! -
ボディ、TD {font-family:arial}
td {font-size:9pt; line-height:18px}
.cred {color:#ff0000}
//->
</style>
<bodyleftmargin = 0topmargin = 3marginwidth = 0marginheight = 0>
<tablealign = centerwidth = 98%cellpacing = 0cellpadding = 0border = 0bgcolor =#ffffff>
<tr>
<formname = f1method = postaction = searchi_bd.asp>
<tdwidth = 150height = 50>
あなたのロゴ
</td>
<tdalign = left>
<inputname = wdsize = 40maxlength = 100title =キーワードを入力してから、検索... value = <%= wd%>>
<inputType = submitValue = baidu検索>
</td> </form> </tr>
</table>
<%
dimstrurl、strtmp_bd、strinfo、strpage、strpagesum_bd、strqtime_bd
dimbnoresult_bd、regex、patrn
'Baiduクエリ文字列
strurl = http://www.baidu.com/s?ie = gb2312&wd =&wd&am ...&pn && cl = 3
'コレクションを開始します
strtmp_bd = gethttppage(strurl)
ifinstr(strtmp_bd、見つかりませんおよびクエリ)<> 0then
bnoresult_bd = 1
endif
'検索結果セクションのコンテンツをインターセプトします
strinfo = strcut(strtmp_bd、<divid = scriptdiv> </div>、<brclear = all>、2)
patrn = </td> </tr> </table> <br>
setRegex = newRegexp '正規表現を作成します。
regex.pattern = patrn'setモード。
regex.ignorecase = true
regex.global = false
strinfo = regex.replace(strinfo、)
'ページングエリアの内容をSeave
strpage = strcut(strtmp_bd、<brclear = all>、<br>、2)
strpage = falple(strpage、href = s?、href = searchi_bd.asp?)
'結果と時間の数
strpagesum_bd = strcut(strtmp_bd、関連するWebページ、記事、2)
ifnotisnumeric(strpagesum_bd)then
strpagesum_bd = strcut(strtmp_bd、関連するWebページ、記事、2)
endif
strqtime_bd = strcut(strtmp_bd、時間、秒、2)
setStrtmp_bd =何もありません
%>
<! - t1-start->
<tablecellpacing = 0cellpadding = 0border = 0width = 98%align = center>
<trvalign = centeralign = middleheight = 18>
<tdwidth = 1bgcolor =#999999>
<tdnowrapstyle = font-weight:bold; color:#ffffff; background-color:#0033ccwidth = 64>インターネット</td>
<tdalign = rightbgcolor =#eeeeeee> <nobr> <b> <%= wd%> </b> <b> <%= strpagesum_bd%> </b>と一致する関連するWebページを見つけ、<b> <%= strqtime_bd%> </b>
</tr>
<tr> <tdbgcolor =#999999Colspan = 3height = 2> </td> </tr> </table>
</td>
</tr>
</table>
<%
ifwd = then
Response.write <palign = 'center'> <fontsize = -1>こんにちは、検索ボックスにキーワードを入力してください。</font> </p>
elseifbnoresult_bd = 1then
Response.write <palign = 'center'> <fontsize = -1>申し訳ありませんが、クエリ条件を満たす情報は見つかりませんでした。適切なキーワードをクエリに再選択してください。</font> </p>
それ以外
%>
<TableWidth = 98%align = centercellspace = 0cellpacing = 0cellpadding = 0border = 0>
<tr>
<tdstyle = line-height:160%bgcolor =#ffffffwidth = 75%valign = top> <br>
<%= strinfo%>
</td>
<tdwidth = 25%valign = top> <br>これはあなたがプレイするためのスペースです!
</td>
</tr>
</table>
<TableWidth = 98%align = centercellspace = 0cellpacing = 0cellpadding = 4border = 0>
<tr>
<tdalign = center>
<br> <fontsize = 3> <%= strpage%> </font>
</td>
</tr>
</table>
<%endif
setstrinfo =何もない
%>
<hrsize = 1width = 760color =#0000ff>
<divalign = center> <fontsize = -1>
<spanclass = cred>(知識共有フォーラム)</span>にアクセスして、</font>を表示してください
</div>
</body>
</html>
<%
'機能のコレクション
functiongethttppage(url)
onerrorresumenext
dimhttp
setthttp = server.createObject(msxml2.xmlhttp)
http.openget、url、false
http.send()
ifhttp.ReadyState <> 4then
exitFunction
endif
gethttppage = bytestobstr(http.responsebody、gb2312)
setthttp =何もない
iferr.Number <> 0then
response.write <divalign = 'center'> <b>ファイルコンテンツの取得でエラーが発生したサーバー</b> </div>
err.clear
endif
エンド機能
'バイトストリームは文字列に変換されます
functionbytestobstr(body、cset)
DimobjStream
setobjstream = server.createobject(adodb.stream)
objstream.type = 1
objstream.mode = 3
objstream.open
objstream.writebody
objstream.position = 0
objstream.type = 2
objstream.charset = cset
bytestobstr = objstream.readtext
objstream.close
setobjstream =何もない
エンド機能
'インターセプトストリング、1。文字列の前後を含む、2。
functionsstrcut(strcontent、startstr、endstr、cuttype)
dims1、s2
onerrorresumenext
SelectCaseCutType
case1
s1 = strunt(strcontent、startstr)
S2 = Instr(S1、Strcontent、Endstr)+Len(Endstr)
ケース2
s1 = strunt(strcontent、startstr)+len(startstr)
s2 = strust(s1、strcontent、endstr)
EndSelect
iferrthen
strcute = <palign = 'center'> <fontsize = -1>文字列をインターセプトするエラーが発生しました。</font> </p>
err.clear
exitFunction
それ以外
strcut = mid(strcontent、s1、s2-s1)
endif
エンド機能
%>
上記のコードをメモ帳にコピーし、searchi_bd.aspとして保存すると、使用できます。ファイル名を変更する場合は、次のコードの青い識別部分もファイル名に変更してください
strpage = falple(strpage、href = s?、href = searchi_bd.asp?)
いくつかの説明:
1。Baidu検索には、基本的に反収集対策はありません。主なポイントは、Baiduが時々Return Resultページのソースコードを変更することです。したがって、Baiduの検索結果ページをよく遵守する必要があります。コードが変更された場合、文字列ロゴを変更できます。反収集の観点から、BaiduはGoogleよりもはるかに寛大です。現在、Baiduの頻繁なクエリのためにソースサイトのIPを一時的にブロックする現象はありません。この現象は、しばしばGoogleクエリで発生します。それを解決する方法次の記事で説明します。
2。収集はよりリソースを消費するものであり、泥棒の検索はプログラムの検索と同じであるため、プログラムではできるだけ早く変数やオブジェクトをリリースしてみてください。スペースリソースがあまりない場合は、これらのことをしないことをお勧めします。
3.一部の人々は、Baiduのスナップショットやオンサイトの検索機能など、捜索泥棒にBaiduの機能的なつながりを保持したくない場合があります。このため、ダウンロードパッケージでBaiduに接続することなく、簡素化されたバージョンを提供します。必要に応じて使用できます。この記事にはコードはリストされていません。これは実際にはフルバージョンに似ています。
上記はこの記事のすべての内容です。私はそれがすべての人の学習に役立つことを願っています、そして、私は誰もが間違った新しいテクノロジーチャネルをサポートすることを願っています。