É muita ideia de pessoas ter nosso próprio mecanismo de pesquisa, mas como podemos ter nosso próprio mecanismo de pesquisa? Agora, o editor ensinará como usar os métodos atuais de coleta de dados populares para implementar seu próprio mecanismo de pesquisa. Agora, vamos dar uma olhada nos métodos para construir seu próprio mecanismo de pesquisa.
1. Entenda a pesquisa do Baidu
A Baidu Search, o maior mecanismo de busca chinesa do mundo, foi listada no Nasdaq nos Estados Unidos em 5 de agosto de 2005. Atualmente, é o mecanismo de pesquisa com a maior taxa de uso de usuários na China, fornecendo várias pesquisas como páginas da web, notícias, fotos, músicas, mapas, etc.
1. Parâmetros de consulta para pesquisa na web do Baidu
Parâmetros necessários
☆ WD-Keyword for Query (palavra-chave)
☆ PN-Número de páginas que mostram o resultado (Pagenumber)
☆ CL-Pesquisa (classe), Cl = 3 é pesquisa na web
Parâmetros opcionais
☆ RN-O número de resultados de pesquisa (RecordNumber), o intervalo de valor está entre 10-100, a configuração padrão é RN = 10
☆ IE-Query A codificação do texto de entrada (InputingEncoding), a configuração padrão é ie = gb2312, que é simplificada chinesa
☆ TN-O site de origem para enviar uma solicitação de pesquisa
Vários TNs úteis
TN = Baidulocal significa que as pesquisas no site do Baidu, os resultados retornados são muito limpos e não há interferência no anúncio. Por exemplo, procure felicidade no Baidu para ver se os resultados são refrescantes.
TN = Baiducnnic quer colocar o Baidu na estrutura? Basta tentar este parâmetro, é personalizado pelo Baidu para CNNIC
☆ Si-Search em nomes de domínio limitado. Por exemplo, se você deseja pesquisar no site da SINA, poderá usar o parâmetro si = sina.com.cn. Para tornar este parâmetro eficaz, você deve usá -lo em conjunto com o parâmetro CT.
☆ CT-O valor desse parâmetro geralmente é uma sequência de números, que é estimada como o código de verificação para a solicitação de pesquisa.
Use parâmetros Si e CT em combinação, por exemplo, pesquisando ideais em sina.com.cn, disponível: http://www.baidu.com/baidu?ie=utf-8&am...n&cl=3&word=ideal
☆ BS-A palavra-chave da última pesquisa (Beforesearch), estimada como está relacionada a pesquisas relacionadas.
2. Estrutura da página de resultados de pesquisa do Baidu
De acordo com a estrutura do código-fonte, o de cima para baixo é:
Caixa de pesquisa
Classificação fixa de áreas quentes à direita
Resultados da pesquisa
Área de paginação
Pesquisas relacionadas
Caixa de pesquisa inferior
Área de direitos autorais
Os resultados da pesquisa e a área de paginação são os dados válidos de que precisamos. De acordo com os resultados do código, você pode encontrar seu identificador de string exclusivo. Basta usar esse identificador para interceptar o conteúdo. Para detalhes, consulte o código a seguir.
2. Função do núcleo-componente xmlHttp usando ASP
O programa de coleta de dados, comumente conhecido como Programa de Thief, é a parte central deste componente XMLHTTP. É um pouco antiquado usar o XMLHTTP para coletar dados, e também há muitas informações on-line. Geralmente, o código de coleta é
setthttp = server.createObject (msxml2.xmlHttp)
Http.openget, url, false'open xmlhttp
Http.send () 'Envie uma solicitação
ifhttp.readyState <> 4Then
saída de saída
endif
gethttppage = bytestobstr (http.Responsebody, GB2312) 'retorne o resultado (geralmente um fluxo de bytes) e converta o fluxo de byte em uma string
setThttp = Nothing'Release XMLHTTP
Veja o código completo abaixo para aplicação detalhada
3. Código completo (nome do arquivo: searchi_bd.asp)
<%
optionExplicit
Dimwd, pn
WD = solicitação (WD)
pn = request.QueryString (PN)
'Inicie o tratamento de erros
OnErrorReSumenext
Iferr.number <> 0then
Response.clear
'Mostrar mensagem de erro ao usuário
Há um erro em resposta.write <palign = 'center'> <fontsize = 3>, abra o Baidu Pesquisa novamente. </font> </p>
endif
%>
<html>
<head>
<title> Baidu Search-<%= WD%> </title>
</head>
<StyleType = text/css>
<!-
corpo, TD {Font-Family: Arial}
Td {font-size: 9pt; altura de linha: 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>
Seu logotipo
</td>
<tdalign = esquerda>
<inputName = wdsize = 40MaxLength = 100Title = Digite palavras -chave e, em seguida, vamos pesquisar ... value = <%= wd%>>
<inputType = submitValue = Baidu Search>
</td> </morm> </tr>
</tabela>
<%
DIMSTRURL, strtmp_bd, strinfo, strpage, strpagesum_bd, strqtime_bd
DIMBNORESULT_BD, REGEX, PATRN
'String de consulta Baidu
strurl = http: //www.baidu.com/s? ie = gb2312 & wd = & wd & am ... & pn && cl = 3
'Inicie a coleção
strtmp_bd = gethttppage (strurl)
Ifinstr (strtmp_bd, não encontrado e sua consulta) <> 0then
bnoresult_bd = 1
Endif
'Intercepte o conteúdo da seção de resultados de pesquisa
strinfo = strcut (strtmp_bd, <divid = scriptdiv> </div>, <Brclear = all>, 2)
Patrn = </td> </tr> </table> <br>
SetRegex = newRegexp 'cria uma expressão regular.
regex.pattern = modo patn'set.
regex.IGNORECASE = true
regex.global = false
strinfo = regex.replace (strinfo,)
'Seave o conteúdo da área de paginação
strpage = strcut (strtmp_bd, <Brclear = all>, <br>, 2)
strpage = substituir (strpage, href = s?, href = searchi_bd.asp?)
'O número de resultados e tempo
strpagesum_bd = strcut (strtmp_bd, encontre a página da web relevante, artigo, 2)
ifnotisnumeric (strpagesum_bd) Então
strpagesum_bd = strcut (strtmp_bd, encontre a página da web relevante, artigo, 2)
endif
strqtime_bd = strcut (strtmp_bd, tempo, segundos, 2)
SETSTRTMP_BD = nada
%>
<!-T1-Start->
<tableCellPacing = 0CellPadding = 0BerDer = 0Width = 98%align = Center>
<trvalign = centralign = MiddleHeight = 18>
<tdwidth = 1bgcolor =#9999999>
<tdnowrapstyle = font-weight: BOLD; cor: #ffffff; colorido de fundo:#0033ccwidth = 64> internet </td>
<tdalign = Rightbgcolor =#eeeeeeee> <birt> Encontre páginas da web relevantes que correspondem a <b> <%= wd%> </b> <b> <%= strpagesum_bd%> </b> e tome <b> <%= strqtime_bd%> </b> segundo </nobr>
</tr>
<tr> <tdbgcolor =#999999colspan = 3Height = 2> </td> </tr> </table>
</td>
</tr>
</tabela>
<%
ifwd = então
Response.Write <Palign = 'Center'> <FontSize = -1> Olá, digite palavras-chave na caixa de pesquisa. </font> </p>
elseifbnoresult_bd = 1hen
Response.Write <Palign = 'Center'> <FontSize = -1> Desculpe, nenhuma informação que atenda às suas condições de consulta foi encontrada. Revende -se a palavra -chave apropriada para consultar. </font> </p>
outro
%>
<TableWidth = 98%alinhe = CenterCellspace = 0CellPacing = 0CellPadding = 0BerDer = 0>
<tr>
<tdstyle = altura da linha: 160%bgcolor =#fffffffwidth = 75%valign = top> <br>
<%= strinfo%>
</td>
<tdwidth = 25%valign = top> <br> Este é o espaço para você jogar!
</td>
</tr>
</tabela>
<TableWidth = 98%alinhe = CenterCellspace = 0CellPacing = 0CellPadding = 4border = 0>
<tr>
<tdalign = Center>
<br> <fontsize = 3> <%= strpage%> </font>
</td>
</tr>
</tabela>
<%Endif
setStrinfo = nada
%>
<hrsize = 1Width = 760Color =#0000FF>
<divalign = Center> <fontsize = -1>
Por favor, vá para <spanclass = cred> (Fórum de Compartilhamento de Conhecimento) </span> para ver </font>
</div>
</Body>
</html>
<%
'Coleção de funções
Functiongethttppage (URL)
OnErrorReSumenext
dimhttp
setthttp = server.createObject (msxml2.xmlHttp)
Http.openget, url, false
Http.send ()
ifhttp.readyState <> 4Then
saída de saída
endif
gethttppage = bytestobstr (http.Responsebody, GB2312)
setthttp = nada
Iferr.number <> 0then
Response.write <divalign = 'Center'> <b> O servidor errou na obtenção de conteúdo do arquivo </b> </div>
Err.clear
Endif
Função final
'Byte Stream se converte em string
FunctionByTestobstr (corpo, 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 = nada
Função final
'Interceptar string, 1.
FunçõesTRCUT (strContent, startstr, endstr, cuttype)
Dims1, S2
OnErrorReSumenext
SelectCasecutType
Case1
S1 = Instr (StrContent, StartStr)
S2 = Instr (S1, strContent, endstr)+len (endstr)
Case2
S1 = Instr (strContent, startstr)+len (startstr)
S2 = Instr (S1, StrContent, Endstr)
EndSelect
IferrThen
strCute = <palign = 'Center'> <fontsize = -1> ocorreu um erro interceptando a string. </font> </p>
Err.clear
Saída de saída
Outro
strcut = médio (strContent, s1, s2-s1)
Endif
Função final
%>
Copie o código acima para o bloco de notas e salve -o como searchi_bd.asp, e você pode usá -lo. Se você deseja alterar o nome do arquivo, altere também a parte de identificação azul do código a seguir para o nome do seu arquivo
strpage = substituir (strpage, href = s?, href = searchi_bd.asp?)
Algumas explicações:
1. A pesquisa do Baidu basicamente não possui nenhuma medidas anti-coleta. O ponto principal é que o Baidu alterará o código -fonte da página de resultado de retorno de vez em quando, então você deve observar a página de resultado da pesquisa do Baidu. Se o código mudar, você poderá alterar o logotipo da string. Em termos de anti-coleta, o Baidu é muito mais generoso que o Google. Atualmente, nenhum fenômeno de bloquear temporariamente o IP do local de origem devido à consulta frequente do Baidu. Esse fenômeno geralmente ocorre nas consultas do Google. Como resolvê -lo é discutido no próximo artigo.
2. A coleta é mais consumida de recursos e a busca de ladrões é a mesma que a busca de programas; portanto, tente liberar variáveis ou objetos o mais cedo possível no programa. Se você não possui muitos recursos espaciais, é recomendável não fazer essas coisas.
3. Algumas pessoas podem não querer manter as conexões funcionais de qualquer Baidu no ladrão de pesquisa que fazem, como instantâneos do Baidu e funções de pesquisa no local. Por esse motivo, forneço uma versão simplificada sem nenhuma conexão com o Baidu no pacote de download. Você pode usá -lo conforme necessário. O código não será listado neste artigo, que é realmente semelhante à versão completa.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem o novo canal de tecnologia.