ASP を使用してお気に入りの泥棒収集プログラムを作成してみませんか? 次の記事を読んだ後、自分で作成することができます。原理
収集プログラムは実際には、XML の XMLHTTP コンポーネントを通じて他の Web サイト上の Web ページを呼び出します。たとえば、ニュース収集プログラムの多くは Sina のニュース Web ページを呼び出し、その中の HTML の一部が置き換えられ、広告もフィルタリングされます。収集プログラムを使用する利点は次のとおりです。収集プログラム内のデータは他の Web サイトから取得され、Web サイトが更新されると更新されるため、Web サイトを保守する必要がなく、一般的にサーバー リソースを節約できます。収集プログラムにはいくつかのファイルしかなく、すべての Web コンテンツは他の Web サイトからのものです。欠点は、不安定であり、ターゲット Web サイトが正常に動作しない場合、プログラムも正常に動作しません。また、ターゲット Web サイトがアップグレードおよび保守されている場合は、リモート呼び出しであるため、収集プログラムもそれに応じて変更する必要があります。速度はローカルサーバー上のデータを読み取るのと同じくらい速いですが、それよりは明らかに遅いです。
1. 事例
以下に、ASP における XMLHTTP のアプリケーションについて簡単に説明します。
次のようにコードをコピーします。
<%
'よく使われる関数
'1. URL ターゲット Web ページのアドレスを入力します。戻り値 getHTTPPage はターゲット Web ページの HTML コードです。
関数 getHTTPage(url)
ディムHTTP
set Http=server.createobject(MSXML2.XMLHTTP)
Http.open GET,url,false
Http.send()
if Http.readystate<>4 then
終了関数
終了する場合
getHTTPPage=bytesToBstr(Http.responseBody,GB2312)
http=何も設定しない
if err.number<>0 then err.Clear
終了関数
'2. Ranma を変換します。xmlhttp を使用して、中国語の文字を含む Web ページを呼び出します。adodb.stream コンポーネントを介して変換できます。
関数 BytesToBstr(body)
薄暗いオブジェクトストリーム
set objstream = Server.CreateObject(adodb.stream)
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.本体の書き込み
objstream.Position = 0
objstream.Type = 2
objstream.Charset = GB2312 '元のデフォルトの UTF-8 エンコーディングを GB2312 エンコーディングに変換します。それ以外の場合、XMLHTTP コンポーネントを直接使用して中国語の文字を含む Web ページを呼び出すと、コードが文字化けします。
BytesToBstr = objstream.ReadText
objstream.Close
objstream = 何も設定しない
終了機能
' http://www.vevb.com の HTML コンテンツを呼び出してみます
薄暗い URL、HTML
URL=http://www.vevb.com;
HTML = getHTTPage(URL)
Response.write HTML
%>
2. よく使用されるいくつかの関数
(1) InStr関数
説明する
特定の文字 (string2) が別の文字列 (string1) 内で初めて出現する位置を返します。
文法
InStr(文字列1, 文字列2)
例えば:
Dim SearchString、SearchChar
SearchString =http://www.vevb.com ' 検索する文字列。
SearchChar = jb51 'jb51を検索します。
MyBK = Instr(SearchString, SearchChar) ' 8 を返します
'見つからない場合は 0 を返します。例:
検索文字 = BK
MyBK = Instr(SearchString, SearchChar) ' 0 を返す
(2) ミッド機能
説明する
文字列から指定された数の文字を返します。
文法
Mid(文字列、開始、終了)
例えば:
ディムMyBK
MyBK = Mid (BK (www.google) デザイン, 7, 12) ' BK (www.google) デザインの 7 文字目以降の 12 文字の文字列をインターセプトします
'この時点でMyBKの値はwww.googleになります
(3) 置換機能
Dim SearchString、SearchChar
SearchString = 私たちの BK デザインは、Web サイト構築リソースの Web サイト内で検索される文字列です。
SearchString =Replace(SearchString,BK design,Www.google)
'この時点で、SearchString の値は Www.google は Web サイト構築リソースの Web サイトになります。
3. 指定した領域のHTMLコードをインターセプトする
たとえば、次の HTML コードの <td> と </td> の間のテキスト部分のみを取得したいとします。
<html>
<title>(www.google)Google 検索エンジン</title>
<本文>
<テーブル>
<tr><td></td></tr>
<tr><td id=Content>BK (www.google) Google 検索エンジンは、多くのリソースを備えたサイトです...</td></tr>
</テーブル>
</body>
</html>
<%
…
ディム StrBK、スタート、オーバー、RsBK
StrBK=getHTTPPage (Web ページのアドレス)
start=Instr(StrBK,<td id=Content>) 'ここでの機能は、文字列の先頭の位置を取得することです。ここで誰かが尋ねるでしょう: 元のコードは <td id=Content> ですが、なぜここで <td id=Content> を呼び出すのでしょうか? 答え: ASP 内 (正確には、VBscript では 2 つの二重引用符で表されます)二重引用符はプログラムにとって重要な文字であるため)。
over=Instr(StrBK,…</td></tr>)'ここでの機能は、文字列の末尾の位置を取得することです。
'ここで誰かがもう一度質問するでしょう:( : プログラムが呼び出す HTML コードの前に余分なドットが 3 つあるのはなぜですか...? 回答: ヒント: 上記には </td></tr> もあります。行内で </td></ tr> を使用して検索すると、プログラムは上記の行の </td></tr> を取得する文字列の末尾と誤ってみなします。
RsBK=mid(StrBK,start,over-start) 'ここでの機能は、StrBKのスタートキャラクタとオーバーキャラクタの間の文字列を抽出することです。前のセクションで Mid 関数についても説明しましたが、オーバースタートは開始位置と終了位置の間の距離、つまり文字数を計算することです。
response.write(RsBK) '最後にプログラムで取得した内容を出力します
%>
実行すると、ページの HTML コードにエラーがあることがわかります。なぜでしょうか。取得するHTMLコードは次のとおりです。
<td id=Content>BK (www.google) Google 検索エンジンは、多くのリソースを備えたサイトです...
それを見ましたか?不完全な HTML コードがあります。何をするか? start=Instr(StrBK,<td id=Content>) ステートメントは、StrBK 内の <td id=Content> の位置番号を取得します。プログラム ステートメントの後に 17 を追加すると、プログラムはその文字の後の位置を指すようになります。 <td id=コンテンツ>。
さて、プログラムは次のように変わります。
<%
…
ディム StrBK、スタート、オーバー、RsBK
StrBK=getHTTPPage (Web ページのアドレス)
start=Instr(StrBK,<td id=Content>) + 17
over=Instr(StrBK,…</td></tr>) 'ここで、7 を減算 (-7) して 3 点を削除することもできます。
RsBK=mid(StrBK,スタート,オーバースタート)
応答.書き込み(RsBK)
%>
これでOKです、欲しいものを盗んで自分のページに表示できます(笑)
4.取得した文字を削除または修正する
RsBK の BK(www.google) を BK に置き換えます。
RsBK=replace(RsBK,BK(www.google),BK)
または、(www.google) を直接削除します。
RsBK=replace(RsBK,(www.google),)
さて、RsBK は次のようになります: BK Google 検索エンジンは、多くのリソースを備えたサイトです...
しかし、実際には、replace 関数は、特定の文字列内のすべての接続を削除したい場合に適していない場合があります。接続には多くの種類が含まれており、replace ではそのうちの 1 つしか置き換えることができません。それを置き換える別の対応する置換関数?
ただし、代わりに正規表現を使用してこのジョブを実行することもできます。ここでは詳細には触れません。
(1) 相手のウェブサイトを自社のウェブサイトにページめくりする処理はどのように行うのですか?
答えは、replace 関数を使用し、ページ パラメーターを渡すことです。
たとえば、相手のページには次のようなページめくりコードが含まれています: <a href=2.htm>次のページ</a> まず、上記のコンテンツを使用してこの文字列を取得し、次に置換関数を使用します: RsBK=。 replace( RsBK,<a href=,<a href=page.asp?Url=)
次に、page.asp プログラムで Url のパラメーター値を取得し、最後にコレクション テクノロジを使用して、次のページに必要なコンテンツを取得します。
(2) 取得したコンテンツをデータベースに保存する方法
紙面の都合上、ここでは簡単に述べさせていただきます。
それは実際には非常に簡単です:
盗まれたコンテンツを処理して、データベースへの書き込み時の SQL インジェクション エラーを防止します。例: replace(String,','')
次に、SQLコマンドを実行してデータベースに挿入すればOKです~
上記は XMLHTTP コンポーネントの基本的なアプリケーションの一部にすぎません。実際には、リモート画像をローカル サーバーに保存したり、adodb.stream コンポーネントを使用して取得したデータをデータベースに保存したりするなど、多くの機能を実装することもできます。コレクションには幅広い機能と用途があります。