Heute muss das Unternehmen nach Abfragen auf der angegebenen Website einige Daten abkratzen. Daher dauerte es einige Zeit, eine Demo für den Vorführungsgebrauch zu schreiben.
Die Idee ist sehr einfach: Es geht darum, über Java auf den Link zuzugreifen, dann die HTML -Zeichenfolge zu erhalten und dann die erforderlichen Daten wie den Link zu analysieren. Technisch gesehen ist JSOUP bequem für die Seitenanalyse. Natürlich ist JSOUP sehr bequem und einfach. Sie können wissen, wie Sie es mit nur einer Codezeile verwenden:
Document doc = jsoup.connect ("http://www.oschina.net/") .data ("query", "java") // Anfrage Parameter.Useragent ("i 'm JSOUP") // Set User-Agent .cookie ("Authoryout.Post. // Verwenden Sie die Post -Methode, um auf die URL zuzugreifen Der gesamte Implementierungsprozess wird unten beschrieben:
1. Analysieren Sie die Seiten, die analysiert werden müssen:
Website: http://www1.sxcredit.gov.cn/public/infocomquery.do?method=publicIndexquery
Seite:
Führen Sie zunächst eine Abfrage auf dieser Seite aus: Beachten Sie die angeforderte URL, Parameter, Methode usw.
Hier verwenden wir das eingebaute Entwickler-Tool (Abschlussschlüssel F12). Die folgenden Ergebnisse sind die Ergebnisse der Abfrage:
Wir können die URL, Methode und Parameter sehen. Nachdem ich gewusst oder URL abfragt wird, werde ich den folgenden Code starten. Um wiederzuverwenden und zu erweitern, habe ich mehrere Klassen definiert:
1. Rule.java wird verwendet, um Abfrage -URL, Methode, Parameter usw. anzugeben.
Paket com.zhy.spider.rule; / ** * Regelklasse * * @Author ZHY * */ public Class Rule {/ ** * Link */ private String url; / ** * Parametersammlung */ private String [] Params; / *** Werte, die dem Parameter*/ private String [] -Werte entsprechen; / ** * Für die zurückgegebene HTML setzen Sie bitte den Typ zuerst */ private String resultTagname; / ** * Klasse / ID / Auswahl * Setzen Sie den Typ des Ergebnistagnamens, Standard für ID * / private int type = id; / ** *Get / post *Die Art der Anfrage, Standard erhalten * / private int requestMoethod = get; öffentliche endgültige statische Int Get = 0; öffentliche endgültige statische int post = 1; öffentliche endgültige statische int class = 0; öffentliche endgültige statische int id = 1; öffentliche endgültige statische Int -Auswahl = 2; public regel () {} public regel (String -URL, String [] Params, String [] Werte, String resultTagName, int type, int requestMoethod) {super (); this.url = url; this.params = params; Dies.Values = Werte; this.ResUntagName = resultTagName; this.type = Typ; this.requestMoethod = RequestMoethod; } public String geturl () {return url; } public void seturl (String url) {this.url = url; } public String [] getParams () {return params; } public void setParams (string [] params) {this.params = params; } public String [] getValues () {Rückgabewerte; } public void setValues (String [] Werte) {this.Values = values; } public String getResultTAGName () {return resultTagName; } public void setResultTAGName (String -ErgebnisTagName) {this.resUntagName = resultTagName; } public int gettType () {return type; } public void setType (int type) {this.type = type; } public int getRequestMoethod () {return requestMoethod; } public void setRequestMoethod (int requestMoethod) {this.RequestMoethod = RequestMoethod; }}Lassen Sie mich kurz sagen: Diese Regelklasse definiert alle Informationen, die wir während des Abfrageprozesses benötigen, was unsere Erweiterungs- und Code -Wiederverwendung erleichtert. Es ist für uns unmöglich, eine Reihe von Code für jede Website zu schreiben, die gekrabbt werden muss.
2. Das erforderliche Datenobjekt benötigt derzeit nur Links, linkTyPedata.java
Paket com.zhy.spider.bean; öffentliche Klasse linktypedata {private int id; / *** Linkadresse*/ private String linkhref; / *** Linktitel*/ private String linkText; / *** Zusammenfassung*/ private Zeichenfolge Zusammenfassung; / *** Inhalt*/ private String -Inhalt; public int getid () {return id; } public void setId (int id) {this.id = id; } public String getLinkhref () {return linkhref; } public void setLinkhref (String linkhref) {this.linkhref = linkhref; } public String getLinkText () {return linkText; } public void setLinkText (string linkText) {this.linkText = linkText; } public String getSummary () {Rückgabezusammenfassung; } public void setSummary (String -Zusammenfassung) {this.summary = summary; } public String getContent () {return content; } public void setContent (String -Inhalt) {this.content = content; }} 3.. Kernabfrageklasse: extractService.java
Paket com.zhy.spider.core; importieren java.io.ioException; Import Java.util.ArrayList; importieren java.util.list; import Java.util.map; importieren javax.swing.plaf.textui; import org.jsoup.connection; import org.jsoup.jsoup; import org.jsoup.nodes.document; import org.jsoup.nodes.element; import org.jsoup.select.elements; import com.zhy.spider.bean.linktypedata; com.zhy.spider.rule.rule; import com.zhy.spider.rule.Ruleexception; com.zhy.spider.util.textutil; / ** * * @Author ZHY * * */ public class extractService {/ ** * @param relum * @return */ public staticliste <LinkTyPedata> extrahieren (Regelregel) {// Führen Sie die notwendige Überprüfung der Regel validaterule (Regel) durch; Liste <LinkTyPedata> datas = new ArrayList <LinkTyPedata> (); LinkTyPedata data = null; try { / ** * parse rel * / string url = regel.geturl (); String [] params = regel.getParams (); String [] values = rel.getValues (); String resultTagname = regel.getResultTAGName (); int type = regel.gettType (); int requestType = regel.getRequestMoethod (); Verbindung conn = jSOUP.Connect (URL); // Abfrageparameter festlegen if (params! }} // Anforderungstyp Dokument docation doc = null; Switch (requestType) {case rel.get: doc = conn.timeout (100000) .get (); brechen; Fallregel.Post: doc = conn.timeout (1000000) .post (); brechen; } // Prozessrückgabedatenelemente Ergebnisse = new Elements (); Switch (Typ) {Fallregel.CLASS: results = doc.getElementsByClass (resultTGAGName); brechen; Fallregel results.add (Ergebnis); brechen; Fallregel brechen; Standard: // Wenn das Ergebnis der Note leer ist, ist das Körper -Tag veraltet, wenn (textil.isempty (resultTGAGName)) {resultations = doc.getElementsByTag ("Körper"); }} für (Elementergebnis: Ergebnisse) {Elements links = result.GetElementsByTag ("a"); für (Element Link: Links) {// Erforderliche Filter String linkHref = link.attr ("href"); String linkText = link.text (); Data = new LinkTyPedata (); Data.SetLinkhref (linkhref); Data.SetLinkText (linkText); Data.Add (Daten); }}} catch (ioException e) {e.printstacktrace (); } return datas; } / *** Führen Sie die erforderliche Überprüfung der übergebenen Parameter durch* / private static void validaterule (Regelregel) {String url = regel.geturl (); if (textil.isempty (url)) {neue rulexception ("url kann nicht leer sein!"); } if (! url.startswith ("http: //")) {neue ruleexception ("url ist falsch!"); } if (regel.getParams ()! = null && regel.getValues ()! }}}}} V.
Paket com.zhy.spider.rule; public class ruleexception erweitert RunTimeException {public Ruleexception () {Super (); // todo automatisch generierter Konstruktor Stub} öffentliche Rulexception (String-Nachricht, Throwable Cause) {Super (Nachricht, Ursache); // todo automatisch generierter Konstruktor Stub} öffentliche Rulexception (String-Nachricht) {Super (message); // todo automatisch generierte Konstruktorstub} öffentliche Rulexception (Throwable Cause) {Super (Ursache); // todo automatisch generierter Konstruktor Stub}}} 5. Schließlich ist es ein Test: Hier werden zwei Websites verwendet, und es werden verschiedene Regeln verwendet. Weitere Informationen finden Sie im Code.
Paket com.zhy.spider.test; importieren java.util.list; import com.zhy.spider.bean.linktypedata; import com.zhy.spider.core.extractservice; com.zhy.spider.rule.rule; public class test { @org.junit.test public void getDatasByClass () {regelregel = neue Regel ("http://www1.sxcRedit.gov.cn/public/infocomquery.do?method=publicIndexquery.Unry. new String[] { "Xingwang"," }, "cont_right", Rule.CLASS, Rule.POST); List<LinkTypeData> extracts = ExtractService.extract(rule); printf(extracts); } @org.junit.Test public void getDatasByCssQuery() { Rule rule = new Regel ("http://www.11315.com/search", neuer String [] {"Name"}, neuer String [] {"Xingwang"}, "div.g-mn div.con-model", Regel, Regel); printf (links <LinkTyPedata> datas) {für (linkTypedata: datas) {System.out.println (Data.GetLinkText ()); Ausgangsergebnis:
Shenzhen Netxing Technology Co., Ltd. Quanxing Internet Cafe# *************************** Zichang County Xinxing Net City# ********************************* The Third Branch of Shaanxi Tongxing Network Information Co., Ltd.# ************************************ Xi'an Gaoxing Network Technology Co., Ltd.# !
Verwenden Sie schließlich eine Baidu -Nachrichten, um unseren Code zu testen: Dies bedeutet, dass unser Code universell ist.
/*** Verwenden Sie Baidu News, setzen Sie nur die URL und die Schlüsselwörter und Rückgabestypen*/ @org.junit.test public void getDatasByCSSQueryUserBaidu () {regel regel = new relum Regel.get); Liste <LinkTyPedata> extracts = extractService.extract (Regel); printf (extrakte); } Wir setzen nur Links, Schlüsselwörter und Anfordernstypen und stellen keine bestimmten Filterbedingungen fest.
Ergebnis: Es ist sicher, dass bestimmte Junk -Daten vorhanden sind, die erforderlichen Daten müssen jedoch gekrabbt werden. Wir können die Regel. Abschnitt sowie weitere Grenzen der Filterbedingungen festlegen.
Sortieren nach Zeit/ns? Word = alipay & ie = utf-8 & bs = alipay & sr = 0 & cl = 2 & rn = 20 & tn = news & ct = 0 & clk = Sortbytime ******************************************************************************** fund with multiple parties to invest 40 million in the first batch http://finance.ifeng.com/a/20140409/12081871_0.shtml *************************************** 7 same Nachrichten/ns? Wort =%e6%94%af%e4%bb%98%E5%AE%9d+Fortsetzung: 2465146414%7c697779368%7c383215921 & gleich = 7 & cl = 1 & tn = News & rn = 30 & fm = sd ********* Schnappschuss http://cache.baidu.com/c?m=9D78D513D9D437AB4F9E91697D1CC0161D4381132BA7D3020CD0870FD33A541 B0120A1AC26510D19879E20345DFE1E4BEA876D26605F75A09BBFD91782A6C1352F8A2432721A84A0FD019ADC 1452FC423875D9DAD0EE7CDB168D5F18C & P = C96EC64AD48B2DEF49BD9B780B64 & NEWP = C4769A4790934EA95EA28E 281C4092695912C10E3DD796 & Benutzer = Baidu & Fm = SC & Query =%D6%A7%B8%B6%B1%A6 & QID = A400F3660007A6C5 & P1 = 1 **************************************************** OpenSSL vulnerability involves many websites Alipay says there is no data leakage yet http://tech.ifeng.com/internet/detail_2014_04/09/35590390_0.shtml ****** Schnappschuss http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece7631050803743438014678387492AC3933fc239045c1c3aa5ec 677E4742CE932B2152F4174BED843670340537B0EFCA8E57DFB08F29288F2C367117845615A71BB8CB31649B66CF04FDEA44 a7ecff25e5aac5A0DA4323C044757E97F1FB4D7017DD1CF4 & P = 8B2A970D95DF11A05AAA4C32013 & Newp = 9E39C64AD4DDD0FA40 BD9B7C5253D8304503C52251D5CE042ACC & Benutzer = Baidu & FM = SC & Query =%D6%A7%B8%B6%B1%A6 & QID = A400F3660007A6C5 & P1 = 2 ******
Wenn es Mängel gibt, können Sie sie darauf hinweisen. Wenn Sie der Meinung sind, dass es für Sie nützlich ist, probieren Sie es bitte aus ~~ haha
Laden Sie den Quellcode herunter und klicken Sie hier.
Das obige ist ein Beispiel für Java Crawler Information Crawling. Wir werden in Zukunft weiterhin relevante Informationen hinzufügen. Vielen Dank für Ihre Unterstützung für diese Seite!