Vorwort
Der Hauptinhalt dieses Artikels: Schreiben Sie in kürzester Zeit den einfachsten Crawler, der die Titel von Forumbeiträgen crawlen und Inhalte posten kann.
Zielgruppe dieses Artikels: Neulinge, die noch nie über Reptilien geschrieben haben.
Erste Schritte
0. Vorbereitung
Dinge, die Sie vorbereiten müssen: Python, Scrapy, eine IDE oder ein beliebiges Textbearbeitungstool.
1. Die technische Abteilung hat studiert und beschlossen, dass Sie den Crawler schreiben werden.
Erstellen Sie nach Belieben ein Arbeitsverzeichnis und erstellen Sie dann über die Befehlszeile ein Projekt. Der Projektname lautet miao und kann durch einen beliebigen Namen ersetzt werden.
1 |
|
Dann erhalten Sie die folgende Verzeichnisstruktur, die von Scrapy
im Spiders-Ordner erstellt wurde. Erstellen Sie eine Python-Datei, z. B. miao.py, als Crawler-Skript. Der Inhalt ist wie folgt:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
2. Probieren Sie es aus?
Wenn Sie die Befehlszeile verwenden, ist es das:
1 2 |
|
Sie können sehen, dass das Reptil seitdem die erste Seite Ihres interstellaren Bereichs ausgedruckt hat Es findet keine Verarbeitung statt, daher wird eine Mischung aus HTML-Tags und JS-Skripten zusammen gedruckt.
Analyse
Als nächstes müssen wir die Seite analysieren, die wir gerade erfasst haben. Aus diesem HTML und js extrahierte Duili die Seite Titel des Beitrags auf dieser Seite. Tatsächlich ist das Parsen einer Seite eine mühsame Aufgabe, und es gibt viele Methoden. Hier stellen wir nur xpath vor.
0. Warum probieren Sie nicht den magischen XPath aus?
Schauen Sie sich das Ding an, das Sie gerade geschnappt haben, oder öffnen Sie die Seite manuell mit dem Chrome-Browser und drücken Sie F12. Sie können siehe Seitenstruktur. Jeder Titel wird tatsächlich von einem solchen HTML-Tag umschlossen. Beispiel:
1 |
|
Sie können sehen, dass href die Adresse des Beitrags ist (natürlich muss die Forumsadresse vorangestellt werden) und der in diesem Tag eingeschlossene Inhalt der Titel des Beitrags ist .
Also haben wir die absolute Positionierungsmethode von xpath verwendet, um den Teil mit class='topic' zu extrahieren.
1. Sehen Sie sich die Wirkung von xpath an
Fügen Sie oben ein Zitat hinzu:
1 |
|
Ändern Sie die Parse-Funktion in:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Führen Sie es erneut aus und Sie können die Titel und URLs aller Beiträge auf der ersten Seite des interstellaren Bereichs Ihres Forums sehen.
Rekursiv
Als nächstes müssen wir den Inhalt jedes Beitrags erfassen. Sie müssen hier Pythons Yield verwenden.
1 |
|
Hier weisen Sie Scrapy an, diese URL zu crawlen und dann die gecrawlte Seite mit der angegebenen parse_topic-Funktion zu analysieren.
An dieser Stelle müssen wir eine neue Funktion definieren, um den Inhalt eines Beitrags zu analysieren.
Der vollständige Code lautet wie folgt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
Bisher kann dieser Crawler die Titel aller Beiträge auf der ersten Seite Ihres Forums crawlen und die erste Seite jedes Beitrags crawlen . Inhalt auf jeder Etage. Das Prinzip des Crawlens mehrerer Seiten ist dasselbe. Achten Sie lediglich darauf, die URL-Adresse der Seite zu analysieren, die Beendigungsbedingung festzulegen und die entsprechende Seitenanalysefunktion anzugeben.
Pipelines - Pipelines
Hier ist die Verarbeitung des gecrawlten und analysierten Inhalts, den Sie in lokale Dateien schreiben können und Datenbanken über Pipes.
0. Definieren Sie ein Element
Erstellen Sie eine items.py-Datei im Miao-Ordner.
1 2 3 4 5 6 7 8 9 10 |
|
Hier definieren wir zwei einfache Klassen, um die Ergebnisse unseres Crawlings zu beschreiben.
1. Schreiben Sie eine Verarbeitungsmethode
Suchen Sie die Datei „pipelines.py“ im Ordner „Miao“, der zuvor automatisch generiert wurde.
Wir können hier eine Verarbeitungsmethode erstellen.
1 2 3 4 5 6 7 8 9 10 |
|
2. Rufen Sie diese Verarbeitungsmethode im Crawler auf.
Um diese Methode aufzurufen, müssen wir sie nur im Crawler aufrufen. Die ursprüngliche Inhaltsverarbeitungsfunktion kann beispielsweise geändert werden in:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
3 Geben Sie dies an die Konfigurationsdatei-Pipeline
Suchen Sie die Datei „settings.py“ und fügen Sie
1 2 |
|
hinzu, um sie im Crawler aufzurufen
„
1 |
|
wird von dieser FilePipeline verarbeitet. Die folgende Zahl 400 stellt die Priorität dar.
Sie können hier mehrere Pipelines konfigurieren, um die Elemente nacheinander entsprechend der Priorität an jedes Element zu übergeben. Das Ergebnis jeder Verarbeitung wird zur Verarbeitung an die nächste Pipeline übergeben.
Sie können mehrere Pipelines wie folgt konfigurieren:
1 2 3 4 5 6 7 |
|
Middleware – Middleware
Über Middleware können wir einige Änderungen an den Anforderungsinformationen vornehmen. Beispielsweise können häufig verwendete Einstellungen wie UA, Proxy, Anmeldeinformationen usw. über Middleware konfiguriert werden.
0.Middleware-Konfiguration
ähnelt der Pipeline-Konfiguration. Fügen Sie den Namen von Middleware zu Setting.py hinzu, z. B.
1 2 3 4 |
|
1. Habe die Website kaputt gemacht, um UA zu überprüfen, ich möchte UA ändern
某些网站不带UA是不让访问的。在miao文件夹下面建立一个middleware.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
这里就是一个简单的随机更换UA的中间件,agents的内容可以自行扩充。
2.破网站封IP,我要用代理
比如本地127.0.0.1开启了一个8123端口的代理,同样可以通过中间件配置让爬虫通过这个代理来对目标网站进行爬取。同样在middleware.py中加入:
1 2 3 4 5 6 |
|
很多网站会对访问次数进行限制,如果访问频率过高的话会临时禁封IP。如果需要的话可以从网上购买IP,一般服务商会提供一个API来获取当前可用的IP池,选一个填到这里就好。
一些常用配置
在settings.py中的一些常用配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
如果非要用Pycharm作为开发调试工具的话可以在运行配置里进行如下配置:
Configuration页面:
Script填你的scrapy的cmdline.py路径,比如我的是
1 |
|
然后在Scrpit parameters中填爬虫的名字,本例中即为:
1 |
|
最后是Working diretory,找到你的settings.py文件,填这个文件所在的目录。
示例:
按小绿箭头就可以愉快地调试了。