収集プログラムは実際には、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.google の HTML コンテンツを呼び出してみます
薄暗い URL、HTML
URL=http://www.google;
HTML = getHTTPage(URL)
Response.write HTML
%>
2. よく使用されるいくつかの関数
InStr関数
説明 特定の文字 (string2) が別の文字列 (string1) 内で最初に出現する位置を返します。
SyntaxInStr(string1, string2)
例えば:
Dim SearchString、SearchChar
SearchString =http://www.google ' 検索する文字列。
SearchChar = blue1000 'blue1000を検索します。
MyBK = Instr(SearchString, SearchChar) ' 8 を返します
'見つからない場合は 0 を返します。例:
検索文字 = BK
MyBK = Instr(SearchString, SearchChar) ' 0 を返す
中間機能
説明: 文字列から指定された数の文字を返します。
SyntaxMid(文字列、開始、終了)
例えば:
ディムMyBK
MyBK = Mid (当社のBK (www.google) デザイン, 7, 12) 「当社のBK (www.google) デザインの7文字目以降12文字の文字列をインターセプト」 このとき、MyBKの値はwww.googleとなります。
置換機能
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>BK (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,オーバースタート)。 'ここでの関数は、StrBK の開始文字とオーバー文字の間の文字列を抽出することです。前のセクションで Mid 関数についても説明しましたが、オーバースタートは開始位置と終了位置の間の距離を計算することです。 、つまり文字数です。
response.write(RsBK) '最後にプログラムで取得した内容を出力します
%>
実行すると、ページの HTML コードにエラーがあることがわかります。なぜでしょうか。取得した HTML コードは次のとおりです: <td id=Content>BK (www.google) Google 検索エンジンは、多くのリソースを備えたサイトです...
それを見ましたか?不完全な HTML コードがあります。何をするか?ステートメント start=Instr(StrBK,<td id=Content>) は、<td id=Content> のコンテンツを取得します。
StrBK の位置番号。プログラム ステートメントの後に 17 を追加すると、プログラムは位置を <td id=Content> の後の文字を指します。
さて、プログラムは次のように変わります。
<%
…
ディム 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 はそれらのうちの特定の 1 つだけを置き換えることができます。対応する 1 つの replace 関数で置き換えることはできません。