1. Anforderungen und Konfiguration
Anforderungen: Kriechen Sie die Informationen auf der JD -Mobiltelefonsuchseite, zeichnen Sie den Namen, den Preis, die Anzahl der Kommentare usw. jedes Mobiltelefons auf und bilden Sie eine Datentabelle, die für die tatsächliche Analyse verwendet werden kann.
Unter Verwendung von Maven Project, Log4J -Protokollen werden Protokolle nur in die Konsole exportiert.
Maven hängt wie folgt ab (pom.xml)
<Depelencies> <De vorstellen> <gruppe> org.apache.httpcomponents </GroupId> <artifactId> httpclient </artifactid> <version> 4.5.3 </Version> </abhängig> <Epungcency> <!-JSOUP HTML PARSER BIBLIOTHY @ https <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> </Abhängigkeiten>
LOG4J -Konfiguration (log4j.properties), Ausgabeinformationen und überstufige Informationen in die Konsole und legten Sie das Ausgabendokument nicht separat fest.
log4j.rootlogger = info, console #console log4j.appender.console = org.apache.log4j.conSeAppenderLog4j.Appender.console.Layout = org.apache.log4j.PatternLayoutlog4j.Appender.Console.layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout.Layout -. %m %n
2. Anforderungenanalyse und Code
2.1 Anforderungenanalyse
Der erste Schritt besteht darin, eine Verbindung zwischen dem Client und dem Server herzustellen und den HTML -Inhalt auf der Webseite über die URL zu erhalten.
Der zweite Schritt besteht darin, den HTML -Inhalt zu analysieren und die erforderlichen Elemente zu erhalten.
Der dritte Schritt besteht darin, den HTML -Inhalt in das lokale Textdokument auszugeben und kann direkt über andere Datenanalyse -Software analysiert werden.
Gemäß der obigen Analyse werden vier Klassen festgelegt, Gethtml (verwendet, um Website -HTML), Parsehtml (zur Analyse von HTML verwendet), WriteTo (zum Ausgabe von Dokumenten verwendet) und MainControl (zur Steuerung verwendet). Die folgenden Klassen sind vier Klassen. Um den Code so präzise wie möglich zu gestalten, werden alle Ausnahmen direkt aus der Methode ohne Fang geworfen.
2.2 Code
2.2.1Gethtml Klasse
Diese Klasse enthält zwei Methoden: Geth (String -URL), urlControl (String BaseUrl, int Seite), die jeweils verwendet werden, um die Webseite HTML und die Steuer -URL zu erhalten. Da der Inhalt der Webseite diesmal nur die Suchergebnisse eines bestimmten Produkttyps auf JD.com ist, müssen nicht alle URLs auf der Seite durchqueren. Sie müssen nur die Änderungen in der URL beobachten, wenn Sie die Seite drehen und die Regeln einführen. Nur die URLControl -Methode ist außerhalb der Außenseite ausgesetzt, und eine private Protokolleigenschaft ist in der Klasse festgelegt: private statische Logger log = logger.getLogger (Gethtml.class); wird verwendet, um Protokolle aufzuzeichnen.
Geth (String -URL), holen Sie sich den HTML -Inhalt einer einzelnen URL.
urlControl (String BaseUrl, int Seite) legt die Schleife fest und greift auf die Daten mehrerer Seiten zu. Durch die Überprüfung der Elemente können Sie feststellen, dass die Änderung auf der Seite der Suchseite auf JD.com tatsächlich eine Änderung in der ungeraden Reihenfolge ist.
Wenn Sie sich die Änderungen in der URL nach dem Klicken ansehen, werden Sie feststellen, dass die tatsächliche Änderung der Wert des Seitenattributs ist. Durch Spleißen können Sie die Adresse der nächsten Webseite problemlos erhalten.
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=162&click=0
Gesamtcode:
importieren java.io.ioxception; import org.apache.http.httpentity; import org.apache.http.client.clientProtocolexception; org.apache.http.impl.client.cloSeableHttpclient; import org.apache.http.impl.client.httpclients; Logger.getLogger (gethtml.class); private statische String Geth (String -URL) löst ClientProtocolException, IOException {// Konsolenprotokolle aus, so dass jede auf jede zugegriffene URL die Zugriffssituation auf der Konsolenprotokoll.info ("Auflösen" + URL) erkennen kann. / * * Der folgende Inhalt ist die allgemeine Verwendung von httpclient, um Verbindungen herzustellen. Httpget get = new httpget (URL); CloseableHttPesponse Antwort = client.execute (get); / * * Der folgende Inhalt besteht darin, den HTML-Inhalt in Zeichenfolge zu konvertieren String -Inhalt; if (Entity! = null) {content = entityutils.toString (Entity, "utf-8"); client.close (); Antwort.CLOSE (); Inhalt zurückgeben; } sonst return null; } public static void urlControl (String baseUrl, int page) löst ClientProtocolException aus, iOException {// Setzen Sie die aktuelle Seite count int count = 1; // Wenn die aktuelle Seite geringer ist als die Anzahl der Seiten, die Sie crawlen möchten, führen Sie aus (count <page) {// Die tatsächlich zugegriffene URL ist der unveränderte URL -Wert, der mit der URL -Änderung der Wert Zeichenfolge u = Basisurl + (2 * count - 1) + "& click = 0" ist. // Hier nennen wir die Methode in der ParSEHTML -Klasse, um die HTML -Seite in der URL zu verarbeiten, und wir werden den Klassenstring content = parsHtml.parse (Geth (u)). ToString () vorstellen; // Hier nennen wir die Methode in der KREPORTO -Klasse, um den analysierten Inhalt lokal zu schreiben. Später werden wir den Class WriteTo.Writeto (Inhalt) vorstellen. zählen ++; }}}2.2.2PARSEHTML -Klasse
In diesem Schritt müssen das Überprüfungselement die Tags ermittelt, die gekrabbelt werden müssen, und sie dann über den CSS -Selektor in JSOUP zu erhalten.
import org.jsoup.jsoup; import org.jsoup.nodes.document; import org.jsoup.nodes.element; import org.jsoup.selekten; doc = jSoup.Parse (Inhalt); // Verwenden Sie SELECT SELECT SELECT, um die Elemente zu greifen, die Sie finden müssen. Der erste Auswahl ist beispielsweise der Inhalt, dessen Klassenattribut dem GL-Kriegsclearfix in den UL-Tag-Elementen ele = doc.Select ("ul [class = GL-kriefe ClearFix]") entspricht ("ul [class = gl-kriege]"). Select ("li [class = gl-iTEM]"); // Setzen Sie einen Container, um die einzelnen Attributs stringBuilder sb = new StringBuilder () zu installieren. // Verwenden Sie den vorherigen Selektor, um alle Elemente zu erhalten, die die Anforderungen auf der gesamten Seite entsprechen, dh jedes Telefon. Im Folgenden müssen Sie jedes Telefon durchqueren, um seine Attribute für (Element E: ELE) {// Die Akquisition jedes Attributs hier zu erhalten, auf einen Artikel, der auf JD.com im Internet kriechen. Es sollte andere verschiedene Schreibmethoden geben. 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]"). Select ("Strong"). Select ("i"). Text (); String pinglun = e.Select ("div [class = p-commit]"). Select ("Strong"). Select ("a"). Text (); // Attribute hinzufügen sb.append (id+"/t"); sb.Append (Mingzi+"/t"); sb.Append (jiaage+"/t"); sb.Append (pinglun+"/t"); sb.Append (pinglun+"/t"); sb.Append ("/r/n"); } return sb; }}2.2.3Writeto -Klasse
Methoden in dieser Klasse schreiben analysierte Inhalte in eine lokale Datei. Nur ein einfaches IO.
Java.io.BufferedWriter importieren; import java.io.file; import Java.io.fileWriter; importieren Sie java.io.ioxception; public class writeTo {// Setzen Sie den Standort der privaten statischen Datei -Datei f = neue Datei ("c: //jingdong.txt"); public static void writeTo (String -Inhalt) löst IOException (// Verwenden Sie die kontinuierliche Schreibmethode, um das Überschreiben des zuvor geschriebenen Inhalts -BufferedWriter bw = new bufferedWriter (neuer Filewriter (F, True)) zu vermeiden. BW.Append (Inhalt); bw.flush (); bw.close (); }}2.2.4MainControl Klasse
Das Hauptkontrollprogramm schreiben die Basisadresse und die Anzahl der zu erhaltenen Seiten. Rufen Sie die URLControl -Methode in der Gethtml -Klasse an, um die Seite zu kriechen.
importieren java.io.ioxception; import org.apache.http.client.clientProtocolException; public class MainControl {public static void main (String [] args) löst ClientProtocolException, IOException {// todo automatisch generierte Methode Stempel Baseurl = aus "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 page = 5; // Setzen Sie die Crawl -Seitenzahl gethtml.urlcontrol (Basisurl, Seite); }}3.. Krabbelne Ergebnisse
Crawlen 20 Seiten.
3.1 Konsolenausgabe
3.2 Dokumentausgabe
Sie können es direkt mit Excel öffnen, und der Trennzeichen ist ein Registerkartenzeichen. Die Spalten sind die Produktnummer, den Namen, den Preis und die Anzahl der Kommentare.
4. Zusammenfassung
Dieser Crawl verwendet Httpclient und JSOUP, was zeigt, dass diese Tools für einfache Bedürfnisse immer noch sehr effizient sind. Tatsächlich können Sie auch alle Klassen in eine Klasse schreiben, und die Idee, mehrere Klassen zu schreiben, ist klarer.
Der obige Artikel Java Crawler kriecht die mobile Suchseite httpclient+JSOUP auf JD.com ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.