Heim >Backend-Entwicklung >Python-Tutorial >So verwenden Sie den Python-Crawler, um diese wertvollen Blog-Beiträge zu erhalten
Der Inhalt dieses Artikels ist, wie man den Python-Crawler verwendet, um diese wertvollen Blog-Beiträge zu erhalten. Jetzt können Freunde in Not auf den Inhalt dieses Artikels verweisen
Autor CDA Data Analyst
Es gibt viele wunderbare technische Blogartikel zu CSDN Wir können es crawlen und auf der lokalen Festplatte speichern, was zum späteren Lesen und Lernen sehr praktisch ist. Jetzt werden wir Python verwenden, um einen Crawler-Code zu schreiben, um diesen Zweck zu erreichen.
Was wir tun wollen: Blog-Artikel automatisch lesen, Titel aufzeichnen und Lieblingsartikel im persönlichen Speicher speichern Speichern Sie die Festplatte Ihres Computers als Referenz für zukünftige Studien.
Der Prozess gliedert sich grob in folgende Schritte:
1. Finden Sie die gecrawlte Ziel-URL
2 Webseite, Finden Sie die Informationen, die Sie speichern möchten.
3. Bereinigen und organisieren Sie die gecrawlten Informationen auf der lokalen Festplatte.
Öffnen Sie die csdn-Webseite. Als Beispiel öffnen wir zufällig eine Webseite:
http://blog.csdn.net/u013088062/article/list/1.
Wie Sie sehen, interessiert sich der Blogger sehr für „C++ Convolutional Neural Network“ und andere Artikel über Maschinencomputer . Gut geschrieben.
Der Crawler-Code ist entsprechend der Idee in drei Kategorien (Klassen) unterteilt. Die folgenden drei mit „#“ geben den Anfang jeder Klasse an (der spezifische Code ist angehängt, damit jeder ihn tatsächlich ausführen und implementieren kann):
Die Methode „Klasse“ gehört zur objektorientierten Programmierung von Python, die manchmal besser ist als die prozessorientierte Programmierung, die wir normalerweise verwenden objektorientierte Programmierung wird häufig in großen Projekten eingesetzt. Für Anfänger ist die objektorientierte Programmierung nicht einfach zu beherrschen, aber nachdem sie gelernt und sich daran gewöhnt haben, werden sie schrittweise von der prozessorientierten zur objektorientierten Programmierung übergehen.
Besonderer Hinweis ist, dass die RePage-Klasse hauptsächlich reguläre Ausdrücke verwendet, um von Webseiten erhaltene Informationen zu verarbeiten String-Stil wie folgt:
Verwenden Sie reguläre Ausdrücke, um den zu crawlenden Inhalt abzugleichen, was mit Python und anderen Softwaretools erreicht werden kann. Es gibt viele Regeln für reguläre Ausdrücke, und jede Software verwendet sie auf ähnliche Weise. Der sinnvolle Einsatz regulärer Ausdrücke ist ein wichtiger Bestandteil von Crawlern und Text Mining.
Die SaveText-Klasse speichert die Informationen lokal. Der Effekt ist wie folgt:
Verwenden Sie Python, um Crawler-Code zu schreiben, der einfach und effizient ist. Dieser Artikel erklärt nur die grundlegendste Verwendung des Crawlers. Interessierte Freunde können den Code herunterladen und einen Blick darauf werfen.
Anbei ist der relevante Python-Code:
<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 1</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#-*-coding:UTF-8-*-</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 2</span><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">import</span> re<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 3</span><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">import</span> urllib2<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 4</span><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">import</span> sys<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 5</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#Zweck : Blogartikel lesen, Titel aufzeichnen und Artikelinhalte im Htnl-Format speichern </span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 6</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);"># Version: python2.7.13</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 7</span> <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#Funktion: Webseiteninhalt lesen</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 8</span><span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">Klasse</span> <span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);">GetHtmlPage</span><span style="font-size:inherit;color:inherit;line-height:inherit;">()</span>: </span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">9</span> <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#Beachten Sie den Fall</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">10</span> <span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">def</span> <span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);">__init__</span> <span style="font-size:inherit;color:inherit;line-height:inherit;">(self,strPage)</span>:</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">11</span> self.strPage<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">12</span> 🎜><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);"> = urllib2 .Request(self.strPapge) </span># Seitenanforderung erstellen<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"></span>15<span style="font-size:inherit;color:inherit;line-height:inherit;"> rep = req.add_header(<span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">"User-Agent"</span>,<span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);"> "Mozilla /5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"</span>)<span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">16</span> Web Request<span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);"></span><br>18<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> page = cn.read() Webseitenkodierung</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);"></span>20<br> > 25 <span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> </span> Außer <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);"> Urllib2.httperror, e: </span>#capture anomalie <br> <span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"></span>26<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);"> </span>Rückkehr<span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);"></span><br> 28<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> <span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">30</span><span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">Klasse</span> <span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);">RePage</span><span style="font-size:inherit;color:inherit;line-height:inherit;">()</span>:</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">31</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);"># Regulärer Ausdruck extrahiert Inhalte und gibt eine verknüpfte Liste </span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">32</span> <span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">def</span> <span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);">GetReText</span><span style="font-size:inherit;color:inherit;line-height:inherit;">(self,page,recode):</span></span><br>33<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> rePage = re.findall(recode,page,re.S)</span><br>34<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> </span>return<span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);"> rePage</span> <br>35<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"></span>#Text speichern<span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);"></span><br>36<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"></span><span style="font-size:inherit;color:inherit;line-height:inherit;">Klasse<span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);"> </span>Text speichern<span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);"></span>()<span style="font-size:inherit;color:inherit;line-height:inherit;">:</span></span><br>37<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> </span><span style="font-size:inherit;color:inherit;line-height:inherit;">def<span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);"> </span>Speichern<span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);"></span>(self,text,tilte)<span style="font-size:inherit;color:inherit;line-height:inherit;">:</span></span>38<br> ><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"></span>40<span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);"> bis </span>. f.close() 🎜>43<br> <span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">außer</span> IOError,e: <span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);"></span>44<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);"> 🎜></span>45<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">if</span> __name__ == <span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"__main__"</span>:<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">46</span> s = SaveText()<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">47</span> <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#Dateikodierung</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">48</span> <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#Zeichen werden korrekt dekodiert</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">49</span> reload(sys)<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">50</span> sys.setdefaultencoding( <span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"utf-8"</span> ) <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#Get den Systemstandard zurück Kodierung </span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">51</span> <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#Get web page</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">52</span> page = GetHtmlPage(<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"http://blog.csdn. net/ u013088062/article/list/1"</span>)<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">53</span> htmlPage = page.GetPage()<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">54</span> <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#Inhalt extrahieren</span> <br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">55</span> reServer = RePage()<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">56</span> reBlog = reServer.GetReText(htmlPage,<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">r'<span class="link_title">.*?(s.+?) </span>'</span>) <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#Rufen Sie den URL-Link und den Titel ab</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">57</span> <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#Gehen Sie nach unten, um den Text abzurufen</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 58</span> <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">for</span> ref <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">in</span> reBlog:<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">59</span> pageHeard = <span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"http://blog.csdn.net/"</span> #Link hinzufügen <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);"></span><br>60<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> strPage = pageHeard+ref[</span>0<span style="font-size:inherit;line-height:inherit;color:rgb(140,208,211);">]</span><br>61<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">tilte=ref[</span>1<span style="font-size:inherit;line-height:inherit;color:rgb(140,208,211);">].replace(</span>'<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">[Top]<span style="color:#FF0000;">'</span>, </span>""<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">) </span>#Verwenden Sie die Ersetzungsfunktion, um komplexes Englisch zu entfernen <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);"></span><br>62<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">tilte=tilte.replace(</span>"rn"<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">,</span>""<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">).lstrip().rstrip()</span><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">63</span> <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#获取正文</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">64</span> htmlPage = GetHtmlPage(strPage)<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">65</span> htmlPageData =. html Page.GetPage()<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">66</span> reBlogText = reServer.GetReText(htmlPageData,<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">'</span></span></span></span>
(.+?)<code style="margin-right:2px;margin-left:2px;padding:.5em;line-height:15px;font-size:11px;word-spacing:-3px;letter-spacing:0px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(220,220,220);display:block !important;overflow:auto !important;background:rgb(63,63,63);">(.+?)
')<code style="margin-right:2px;margin-left:2px;padding:.5em;line-height:15px;font-size:11px;word-spacing:-3px;letter-spacing:0px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(220,220,220);display:block !important;overflow:auto !important;background:rgb(63,63,63);">')<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">67</span> <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#保存文件</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">68</span> <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">for</span> s1 <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">in</span> reBlogText:<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">69</span> s1=<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">'n'</span>+s1<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">70</span> s.Save(s1,tilte)<br>
#保存文件
für s1 in reBlogText:69
s1=Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Python-Crawler, um diese wertvollen Blog-Beiträge zu erhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!