우리 자신의 검색 엔진을 갖는 것은 많은 사람들의 아이디어이지만 어떻게 우리 자신의 검색 엔진을 가질 수 있습니까? 이제 편집자는 현재 인기있는 데이터 수집 방법을 사용하여 자체 검색 엔진을 구현하는 방법을 알려줍니다. 이제 자체 검색 엔진을 구축하는 방법을 살펴 보겠습니다.
1. Baidu 검색을 이해하십시오
세계 최대의 중국 검색 엔진 인 Baidu Search는 2005 년 8 월 5 일 미국의 NASDAQ에 상장되었습니다. 현재 중국에서 가장 높은 사용자 사용률을 가진 검색 엔진으로 웹 페이지, 뉴스, 그림, 음악,지도 등과 같은 다양한 검색을 제공합니다.
1. Baidu 웹 검색의 쿼리 매개 변수
필요한 매개 변수
☆ wd- 쿼리 용 keyword (키워드)
☆ PN- 결과를 보여주는 페이지의 수
CL-CL- 검색 유형 (클래스), CL = 3은 웹 검색입니다
선택적 매개 변수
RN-- RN- 검색 결과 수 (레코드 오너), 값 범위는 10-100, 기본 설정은 rn = 10입니다.
he- 즉-입력 텍스트의 인코딩 (inputencoding)의 기본 설정은 ie = gb2312이며 중국어를 단순화 한 것입니다.
☆ TN- 검색 요청을 제출하기위한 소스 사이트
몇 가지 유용한 TN
tn = baidulocal은 바이두 사이트에서 검색하면 반환 된 결과가 매우 깨끗하고 광고 간섭이 없음을 의미합니다. 예를 들어, 바이두에서의 행복을 검색하여 결과가 상쾌한 지 확인하십시오.
tn = baiducnnic은 Baidu를 프레임 워크에 넣고 싶어합니까? 이 매개 변수를 사용해보십시오. CNNIC에 대해 Baidu에 의해 사용자 정의됩니다.
domain 제한된 도메인 이름의 SI-Search. 예를 들어 Sina의 웹 사이트에서 검색하려면 매개 변수 si = sina.com.cn을 사용할 수 있습니다. 이 매개 변수를 효과적으로하려면 CT 매개 변수와 함께 사용해야합니다.
CT-이 매개 변수의 값은 일반적으로 일련의 숫자이며 검색 요청에 대한 확인 코드로 추정됩니다.
예를 들어 Sina.com.cn에서 이상을 검색하는 SI 및 CT 매개 변수를 사용하여 사용 가능합니다.
☆ 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
종료 기능
endif
gethttppage = bytestobstr (http.responsebody, gb2312) '결과를 반환하고 바이트 스트림을 문자열로 변환합니다.
setthttp = nothing'release xmlhttp
자세한 응용 프로그램은 아래의 전체 코드를 참조하십시오
3. Complete Code (파일 이름 : searchi_bd.asp)
<%
옵션 출현
Dimwd, Pn
WD = 요청 (WD)
pn = request.querystring (pn)
'오류 처리를 시작하십시오
onerrorresumenext
iferr.number <> 0then
응답
'사용자에게 오류 메시지를 표시합니다
응답에 오류가 있습니다 .write <palign = 'center'> <fontsize = 3>, 다시 Baidu 검색을 열어주세요. </font> </p>
endif
%>
<html>
<헤드>
<title> baidu 검색-<%= wd%> </title>
</head>
<styletype = text/css>
<!-
Body, TD {Font-Family : Arial}
TD {font-size : 9pt; line-height : 18px}
.CRED {색상 :#FF0000}
//->
</스타일>
<bodyleftmargin = 0topmargin = 3MarginWidth = 0MarginHeight = 0>
<tablealign = centerwidth = 98%셀 패키징 = 0cellPadding = 0border = 0bgcolor =#ffffff>
<tr>
<formname = f1method = postaction = searchi_bd.asp>
<tdwidth = 150height = 50>
당신의 로고
</td>
<tdalign = 왼쪽>
<inputname = wdsize = 40maxlength = 100title = 키워드를 입력 한 다음 값 = value = <%= wd%>>
<inputtype = submitvalue = baidu 검색>
</td> </form> </tr>
</테이블>
<%
Dimstrurl, strtmp_bd, strinfo, strpage, strpagesum_bd, strqtime_bd
Dimbnoresult_bd, Regex, Patrn
'바이두 쿼리 문자열
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,)
'페이징 구역의 내용을 바다
strpage = strcut (strtmp_bd, <brclear = all>, <br>, 2)
strpage = replace (strpage, href = s?, href = searchi_bd.asp?)
'결과와 시간의 수
strpagesum_bd = strcut (strtmp_bd, 관련 웹 페이지 찾기, 기사, 2)
그런 다음 ifnotisnumeric (strpagesum_bd)
strpagesum_bd = strcut (strtmp_bd, 관련 웹 페이지 찾기, 기사, 2)
endif
strqtime_bd = strcut (strtmp_bd, 시간, 초, 2)
setstrtmp_bd = 아무것도
%>
<!-t1- 스타트->
<TABLECELLPACING = 0CELLPADDING = 0BORDER = 0WIDTH = 98%ALIGN = CENTER>
<trvalign = centrealign = middleHeight = 18>
<tdwidth = 1bgcolor =#999999>
<tdnowrapstyle = font-weight : bold; color : #ffffff; 배경색 :#0033ccwidth = 64> 인터넷 </td>
<tdalign = rightbgcolor =#eeeeeeee> <obr> 일치하는 관련 웹 페이지 찾기 <b> <%= wd%> </b> <b> <%= strpagesum_bd%> </b>, 그리고 <b> <%= strqtime_bd%> </b> seconds </nobr> </td>
</tr>
<tr> <TDBGCOLOR =#999999COLSPAN = 3HEIGHT = 2> </td> </tr> </table>
</td>
</tr>
</테이블>
<%
ifwd = 그런 다음
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>
</테이블>
<tableWidth = 98%align = centerCellSpace = 0CellPacing = 0CellPadding = 4border = 0>
<tr>
<tdalign = 센터>
<br> <fontsize = 3> <%= strpage%> </font>
</td>
</tr>
</테이블>
<%endif
setstrinfo = 아무것도 없습니다
%>
<hrsize = 1width = 760color =#0000ff>
<divalign = center> <fontsize = -1>
<spanclass = cred> (지식 공유 포럼) </font>로 이동하십시오 </font>로 이동하십시오
</div>
</body>
</html>
<%
'기능 모음
functiongethttppage (url)
onerrorresumenext
dimhttp
setthttp = server.createobject (msxml2.xmlhttp)
http.openget, url, false
http.send ()
ifhttp.readystate <> 4then
종료 기능
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. 문자열 전후에 포함되지 않음
functionstrcut (strcontent, startstr, endstr, cuttype)
Dims1, S2
onerrorresumenext
SELECTCASECUTTYPE
CASE1
S1 = Instr (strcontent, startstr)
S2 = Instr (S1, Strcontent, endstr)+Len (endstr)
CASE2
s1 = inst (strcontent, startstr)+len (startstr)
S2 = Instr (S1, Strcontent, endstr)
EndSelect
iferrthen
strcute = <palign = 'center'> <fontsize = -1> 오류가 문자열을 가로 채면서 발생했습니다. </font> </p>
err.clear
종료 기능
또 다른
strcut = mid (strcontent, s1, s2-s1)
endif
최종 기능 장애
%>
위의 코드를 메모장에 복사하여 searchi_bd.asp로 저장하면 사용할 수 있습니다. 파일 이름을 변경하려면 다음 코드의 파란색 식별 부분을 파일 이름으로 변경하십시오.
strpage = replace (strpage, href = s?, href = searchi_bd.asp?)
몇 가지 설명 :
1. Baidu 검색은 기본적으로 수집 방지 조치가 없습니다. 요점은 Baidu가 가끔씩 반환 결과 페이지의 소스 코드를 변경한다는 것입니다. 따라서 Baidu의 검색 결과 페이지를 종종 관찰해야합니다. 코드가 변경되면 문자열 로고를 변경할 수 있습니다. 수집 방지 측면에서 Baidu는 Google보다 훨씬 관대합니다. 현재 바이두의 빈번한 쿼리로 인해 소스 사이트의 IP를 일시적으로 차단하는 현상은 없습니다. 이 현상은 종종 Google 쿼리에서 발생합니다. 해결 방법은 다음 기사에서 논의됩니다.
2. 수집은 더 많은 자원이 많으며 도둑 검색은 프로그램 검색과 동일하므로 프로그램에서 가능한 한 빨리 변수 나 객체를 해제하십시오. 공간 자원이 많지 않은 경우 이러한 작업을 수행하지 않는 것이 좋습니다.
3. 어떤 사람들은 바이두 스냅 샷 및 현장 검색 기능과 같이 검색 도둑에서 바이두의 기능적 연결을 유지하고 싶지 않을 수도 있습니다. 이러한 이유로 다운로드 패키지에서 Baidu에 연결하지 않고 단순화 된 버전을 제공합니다. 필요에 따라 사용할 수 있습니다. 이 기사에는 코드가 나열되지 않으며 실제로 정식 버전과 유사합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 잘못된 새로운 기술 채널을 지원하기를 바랍니다.