1. Requisitos e configuração
Requisitos: rasteje as informações na página de pesquisa de telefone celular JD, grave o nome, o preço, o número de comentários, etc. de cada telefone celular e forme uma tabela de dados que pode ser usada para análise real.
Usando o projeto MAVEN, os logs log4j, os logs são exportados apenas para o console.
Maven depende da seguinte forma (Pom.xml)
<Dependences> <pendency> <voundId> org.apache.httpcomponents </groupid> <TRAFACTID> httpclient </artifactId> <versão> 4.5.3 </versão </dependency> <pendency> <!-jsoup html liblibrary @ https:/jsoup.org.org.orgump.org.org/https:/jsouper> <artifactId>jsoup</artifactId> <version>1.11.2</version> </dependency> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependências>
Configuração log4j (log4j.properties), informações de saída e informações acima do nível no console e não defina o documento de saída separadamente.
log4j.rootLogger=INFO, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m %n
2. Análise de requisitos e código
2.1 Análise de requisitos
A primeira etapa é estabelecer uma conexão entre o cliente e o servidor e obter o conteúdo HTML na página da web através do URL.
A segunda etapa é analisar o conteúdo HTML e obter os elementos necessários.
A terceira etapa é produzir o conteúdo HTML para o documento de texto local e pode ser analisado diretamente por meio de outro software de análise de dados.
De acordo com a análise acima, são estabelecidas quatro classes, Gethtml (usado para obter o site HTML), parsehtml (usado para analisar HTML), WritEto (usado para produzir documentos) e MainControl (usado para controlar). A seguir, são quatro classes. Para tornar o código o mais conciso possível, todas as exceções são jogadas diretamente do método sem captura.
2.2 Código
2.2.1 Classe
Esta classe contém dois métodos: Geth (String URL), UrlControl (String BaseUrl, Int Page), que são usados respectivamente para obter a página da web HTML e o URL de controle. Como o conteúdo da página da web rastejou desta vez são apenas os resultados de pesquisa de um certo tipo de produto no JD.com, não há necessidade de atravessar todos os URLs na página. Você só precisa observar as alterações na URL ao girar a página e introduzir as regras. Somente o método URLControl é exposto ao exterior e uma propriedade de log privada é definida na classe: logger estático privado = logger.getLogger (gethtml.class); é usado para gravar logs.
GETH (URL da string), obtenha o conteúdo HTML de um único URL.
UrlControl (String Baseurl, Int Page), define o loop e acessa os dados de várias páginas. Ao revisar os elementos, você pode ver que a alteração na página da página de pesquisa no JD.com é realmente uma alteração na ordem estranha.
Se você observar as alterações no URL após o clicar, descobrirá que a alteração real é o valor do atributo da página. Por emenda, você pode facilmente obter o endereço da próxima página da web.
https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page=3&s=47&click=0
https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page=5&s=111&click=0
https://search.jd.com/search?keyword=%E6%89%8B%E6%9C%BA&ENC=utf-8&qrst=1&rt=1&stop=1&vt=2&cid2=653&cid3=655&page=7&s
Código geral:
importar java.io.ioException; importar org.apache.http.httpentity; importar org.apache.http.client.clientprotocolexception; importar org.apache.http.client.methods.closeablehttroponse; org.apache.http.impl.client.closeablehttpclient; importar org.apache.http.impl.client.httpclients; import org.apache.http.util.entityutils; Imports org.apache.log4j.logger; lógico gethtml; Logger.getLogger (gethtml.class); Geth de sequência estática privada (URL da string) lança clientprotocolexception, ioexception {// console sai logs, para que cada URL acessado possa ver a situação de acesso no log.info ("resolução" + URL); / * * O conteúdo a seguir é o uso geral do httpclient para estabelecer conexões * Use httpclient para estabelecer um cliente * Use o método GET para acessar o URL especificado * obter uma resposta * */ ClosethttpClient Client = httpclients.createFault (); Httpget get = novo httpget (url); ClosableHttpResponse Response = client.execute (get); / * * O conteúdo seguinte é converter o conteúdo HTML em string * Obtenha o corpo de resposta * Converta o corpo da resposta em formato de string, aqui o método da tostração em entityutils é usado, e o formato de codificação é definido como "utf-8" * fechar o cliente e responder após a conclusão * */ httpentity entity = resposta.get.getentity (); Conteúdo de string; if (entidade! = null) {content = entityutils.toString (entidade, "utf-8"); client.close (); resposta.close (); retornar conteúdo; } mais retorna nulo; } public static void UrlControl (String Baseurl, Int Page) lança clientProtocolexception, ioexception {// Defina a contagem atual de página int int = 1; // Se a página atual for menor que o número de páginas que você deseja rastrear, execute enquanto (contagem <página) {// o URL realmente acessado é o valor da URL inalterado emendado com a sequência de valor de alteração do URL u = baseurl + (contagem 2 * contagem - 1) + "& clique = 0"; // aqui chamamos o método na classe parsehtml para processar a página HTML no URL, e apresentaremos o conteúdo da String de classe = parsehtml.parse (geth (u)). Tostring (); // Aqui chamamos o método na classe WritEto para escrever o conteúdo analisado localmente. Posteriormente, apresentaremos a classe WritEto.WritEto (Content); contagem ++; }}}2.2.2PARSEHTML Classe
Esta etapa requer o elemento de revisão para determinar as tags que precisam ser rastejadas e, em seguida, obtê -las através do seletor CSS no JSUP.
importar org.jsoup.jsoup; importar org.jsoup.nodes.document; importar org.jsoup.nodes.Element; importar org.jsoup.select.lements; public classe parsehtml {public static stringbuilder parse (string) {// use o método parse no jsoup no jsoup para analisar o jsout para analisar a hemstration para analisar a parsem, a parseMM para a parsem do jsout para analisá -se para a parsem, o método de parse no jsoust para analisar o mecanismo de parsem para a parsem em jsout para analisar o método de parse no jsout para analisar para a parsem, o método de parse no jsoust para analisar para a parsem para a parsem em jsout para analisar a parsem, para a parsem. doc = jsoup.parse (content); // Use selecionar Selecionar para agarrar os elementos que você precisa encontrar. Por exemplo, a primeira seleção é o conteúdo cujo atributo de classe é igual a GL-Warp Clearfix no UL Tag Elements ELE = Doc.Select ("Ul [class = GL-Warp Clearfix]"). Selecione ("Li [class = Gl-iteem]"); // Defina um contêiner para instalar cada atributo stringbuilder sb = new stringbuilder (); // Use o seletor anterior para obter todos os elementos que atendem aos requisitos em toda a página, ou seja, cada telefone. Abaixo, você precisa atravessar cada telefone para obter seus atributos para (elemento e: ele) {// A aquisição de cada atributo aqui se refere a um artigo rastejando conteúdo no JD.com na Internet. Deve haver outros métodos de escrita diferentes. String id = e.attr ("Data-pid"); String mingzi = e.select ("div [class = p-name p-name-type-2]"). Select ("a"). Select ("em"). Text (); String jiage = e.select ("div [class = p-price]"). Selecione ("forte"). Selecione ("i"). Text (); String pingLun = e.select ("div [class = p-commit]"). Selecione ("forte"). Select ("a"). Text (); // Adicione atributos sb.append (id+"/t"); sb.append (mingzi+"/t"); sb.append (jiaage+"/t"); sb.append (pinglun+"/t"); sb.append (pinglun+"/t"); sb.append ("/r/n"); } retornar sb; }}2.2.3 ClasseWRITETO
Métodos nesta classe Escreva conteúdo analisado em um arquivo local. Apenas um IO simples.
importar java.io.bufferedwriter; importar java.io.file; importar java.io.fileWriter; importar java.io.ioException; public class WritEto {// Defina a localização do arquivo de armazenamento de arquivo Private File F = novo arquivo ("c: //jingdong.txt"); public static void writeto (conteúdo de string) lança IoException {// Use o método de escrita contínua para evitar a substituição do conteúdo bufferwriter de conteúdo anteriormente escrito BW = new BufferWriter (novo FileWriter (f, true)); BW.Append (Content); bw.flush (); bw.close (); }}2.2.4 MAINCONTROL Classe
O programa principal de controle, escreva o endereço base e o número de páginas a serem obtidas. Ligue para o método URLControl na classe Gethtml para rastejar a página.
importar java.io.ioException; importar org.apache.http.client.clientprotocolexception; classe pública MainControl {public static void main (string [] args) lança clientprotocolexception, iooxception {// TODO Método auto-gerado Stub String Baseurl = "https://search.jd.com/search?keyword=%E6%89%8B%E6%9C%BA&ENC=" + "UTF-8 & QRST = 1 & RT = 1 & STOP = 1 & VT = 2 & CID2 = 653 & CID3 = 655 & PAGE ="; int página = 5; // Defina o número da página de rastreamento Gethtml.urlControl (Baseurl, página); }}3. Resultados de rastejamento
Rastreie 20 páginas.
3.1 Saída do console
3.2 Saída do documento
Você pode abri -lo diretamente com o Excel e o delimitador é um caractere de guia. As colunas são o número do produto, nome, preço e número de comentários, respectivamente.
4. Resumo
Esse rastreamento usa o HTTPClient e o JSUPUP, que mostra que, para necessidades simples, essas ferramentas ainda são muito eficientes. De fato, você também pode escrever todas as classes em uma classe, e a idéia de escrever várias classes é mais clara.
O artigo acima Java Crawler rasteja a página de pesquisa móvel httpclient+jsoup no jd.com é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.