Heim >Backend-Entwicklung >Python-Tutorial >Schreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmen
Aus den Kommentaren zum vorherigen Artikel geht hervor, dass viele Kinderschuhe dem Quellcode des Crawlers mehr Aufmerksamkeit schenken. Dieser Artikel enthält eine sehr detaillierte Beschreibung der Verwendung von Python zum Schreiben eines einfachen Webcrawlers zum Erfassen von Video-Download-Ressourcen. Ich hoffe, dass er für alle hilfreich sein kann.
Dies ist mein erstes Mal Ich kam im Mai dieses Jahres mit Crawlern in Berührung. Der verwendete Crawler war ziemlich intelligent, zumindest viel höher als der Crawler der Website Here Comes the Movie!
Zurück zum Thema Crawler in Python schreiben.
Python war schon immer meine wichtigste Skriptsprache, ohne Ausnahme. Die Sprache von Python ist einfach und flexibel und die Standardbibliothek ist leistungsstark. Sie kann als Taschenrechner, Textkodierungskonvertierung, Bildverarbeitung, Stapel-Download, Stapeltextverarbeitung usw. verwendet werden. Kurz gesagt, es gefällt mir sehr gut und je öfter ich es benutze, desto besser werde ich darin. Den meisten Leuten erzähle ich nichts von einem so nützlichen Tool. . .
Aufgrund seiner leistungsstarken String-Verarbeitungsfunktionen und der Existenz von Modulen wie urllib2, cookielib, re und threading ist es einfach, Crawler in Python zu schreiben. Wie einfach kann es sein? Ich erzählte damals einem Klassenkameraden, dass die Gesamtzahl der Zeilen Skriptcode für die verschiedenen Crawler und verstreuten Skripte, die ich zum Kompilieren des Films „Here Comes“ verwendet habe, nicht mehr als 1.000 betrug und die Website „Here Comes“, ein Film, nur etwa 1.000 Zeilen hatte 150 Zeilen Code. Da sich der Code des Crawlers auf einem anderen 64-Bit-Black-Apple befindet, werde ich ihn nicht auflisten, sondern nur den Code der Website auf dem VPS auflisten
[xiaoxia@307232 movie_site]$ wc -l *.py template/* 156 msite.py 92 template/base.html 79 template/category.html 94 template/id.html 47 template/index.html 77 template/search.html
und zeigen Sie es direkt unten. Der folgende Inhalt dient ausschließlich Kommunikations- und Lernzwecken und hat keine andere Bedeutung.
Nehmen Sie als Beispiel die neueste Video-Download-Ressource einer bestimmten Bucht. Die URL lautet
http://piratebay.se/browse/200
Weil Auf dieser Webseite gibt es viele Anzeigen, daher werde ich nur den Hauptinhalt veröffentlichen:
Laden Sie für einen Python-Crawler den Quellcode dieser Seite herunter, eine Codezeile ist genug. Hier wird die Bibliothek urllib2 verwendet.
>>> import urllib2 >>> html = urllib2.urlopen('http://某piratebay.se/browse/200').read() >>> print 'size is', len(html) size is 52977
Natürlich können Sie auch die Systemfunktion im Betriebssystemmodul verwenden, um den Befehl wget aufzurufen, um Webinhalte herunterzuladen. Dies ist sehr praktisch für Schüler, die die Tools wget oder curl beherrschen.
Verwenden Sie Firebug, um die Struktur der Webseite zu beobachten, und Sie können wissen, dass der HTML-Code im Haupttext eine Tabelle ist. Jede Ressource ist ein tr-Tag.
Für jede Ressource müssen folgende Informationen extrahiert werden:
1 Videoklassifizierung
2. Ressourcenlink
4. Ressourcengröße
5. Upload-Zeit
<tr> <td> <center> <a>视频</a><br> (<a>电视</a>) </center> </td> <td> <p> <a>The Walking Dead Season 3 Episodes 1-3 HDTV-x264</a> </p> <a><img alt="Schreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmen" ></a> <a><img alt="Schreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmen" ></a><img alt="Schreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmen" ><img alt="Schreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmen" > <font>已上传 <b>3 分钟前</b>, 大小 2 GiB, 上传者 <a>paridha</a></font> </td> <td>0</td> <td>0</td> </tr>Im Folgenden werden reguläre Ausdrücke verwendet, um den Inhalt im HTML-Code zu extrahieren. Schüler, die sich mit regulären Ausdrücken nicht auskennen, können unter http://docs.python.org/2/library/re.html mehr erfahren. Es gibt einen Grund, warum Sie zum Parsen von HTML- oder DOM-Bäumen reguläre Ausdrücke anstelle einiger anderer Tools verwenden sollten. Ich habe zuvor versucht, BeautifulSoup3 zum Extrahieren von Inhalten zu verwenden, stellte jedoch später fest, dass die Geschwindigkeit sehr langsam war. Die Fähigkeit, 100 Inhalte in einer Sekunde zu verarbeiten, war bereits die Grenze meines Computers. . . Aber durch die Änderung des regulären Ausdrucks und die Verarbeitung des Inhalts nach der Kompilierung wird die Geschwindigkeit direkt zunichte gemacht! Wie schreibe ich meinen regulären Ausdruck, um so viel Inhalt zu extrahieren? Meiner Erfahrung nach ist „.*?“ oder „.+?“ sehr nützlich.
Aber wir sollten auch auf einige kleine Probleme achten. Für den obigen tr-Tag-Code muss ich zuerst dafür sorgen, dass mein Ausdruck mit dem Symbol übereinstimmt 🎜 >
zu anderen Ressourceninformationen,
font class="detDesc">Hochgeladenvor 3 Minuten, Größe 2 GiB, hochgeladen von
Letztes Spiel
tr>Du bist fertig!
Natürlich muss die endgültige Übereinstimmung nicht im regulären Ausdruck ausgedrückt werden. Solange die Startposition korrekt ist, ist auch die Position korrekt, an der die Informationen später abgerufen werden. Freunde, die mit regulären Ausdrücken vertraut sind, wissen vielleicht, wie man sie schreibt. Lassen Sie mich Ihnen den Ausdrucksverarbeitungsprozess zeigen, den ich geschrieben habe,
就这么简单,结果出来了,自我感觉挺欢喜的。
当然,这样设计的爬虫是有针对性的,定向爬取某一个站点的内容。也没有任何一个爬虫不会对收集到的链接进行筛选。通常可以使用BFS(宽度优先搜索算法)来爬取一个网站的所有页面链接。
完整的Python爬虫代码,爬取某湾最新的10页视频资源:
# coding: utf8 import urllib2 import re import pymongo db = pymongo.Connection().test url = 'http://某piratebay.se/browse/200/%d/3' find_re = re.compile(r'<tr>.+?\(.+?">(.+?)</a>.+?class="detLink".+?">(.+?)</a>.+?<a href="(magnet:.+?)" .+?已上传 <b>(.+?)</b>, 大小 (.+?),', re.DOTALL) # 定向爬去10页最新的视频资源 for i in range(0, 10): u = url % (i) # 下载数据 html = urllib2.urlopen(u).read() # 找到资源信息 for x in find_re.findall(html): values = dict( category = x[0], name = x[1], magnet = x[2], time = x[3], size = x[4] ) # 保存到数据库 db.priate.save(values) print 'Done!'
以上代码仅供思路展示,实际运行使用到mongodb数据库,同时可能因为无法访问某湾网站而无法得到正常结果。
所以说,电影来了网站用到的爬虫不难写,难的是获得数据后如何整理获取有用信息。例如,如何匹配一个影片信息跟一个资源,如何在影片信息库和视频链接之间建立关联,这些都需要不断尝试各种方法,最后选出比较靠谱的。
曾有某同学发邮件想花钱也要得到我的爬虫的源代码。
要是我真的给了,我的爬虫就几百来行代码,一张A4纸,他不会说,坑爹啊!!!……
都说现在是信息爆炸的时代,所以比的还是谁的数据挖掘能力强
好吧,那么问题来了学习挖掘机(数据)技术到底哪家强?
相关推荐:
Das obige ist der detaillierte Inhalt vonSchreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!