Heim >Backend-Entwicklung >Python-Tutorial >Schreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmen

Schreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmen

不言
不言Original
2018-04-18 15:34:147548Durchsuche

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 Schreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmen

[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

Das reicht aus und Sie können es bei Bedarf erhöhen.

Extrahieren Sie zunächst einen Codeabschnitt im tr-Tag, um einen Blick darauf zu werfen.

<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. Schreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmenFür den obigen tr-Tag-Code muss ich zuerst dafür sorgen, dass mein Ausdruck mit dem Symbol übereinstimmt 🎜 >

gibt den Anfang des Inhalts an. Natürlich kann es auch alles andere sein, solange Sie den erforderlichen Inhalt nicht verpassen. Dann möchte ich den folgenden Inhalt abgleichen, um die Videoklassifizierung zu erhalten.

(TV)

Dann muss ich den Ressourcenlink

...

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 = &#39;http://某piratebay.se/browse/200/%d/3&#39;
find_re = re.compile(r&#39;<tr>.+?\(.+?">(.+?)</a>.+?class="detLink".+?">(.+?)</a>.+?<a href="(magnet:.+?)" .+?已上传 <b>(.+?)</b>, 大小 (.+?),&#39;, 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 &#39;Done!&#39;

以上代码仅供思路展示,实际运行使用到mongodb数据库,同时可能因为无法访问某湾网站而无法得到正常结果。

所以说,电影来了网站用到的爬虫不难写,难的是获得数据后如何整理获取有用信息。例如,如何匹配一个影片信息跟一个资源,如何在影片信息库和视频链接之间建立关联,这些都需要不断尝试各种方法,最后选出比较靠谱的。

曾有某同学发邮件想花钱也要得到我的爬虫的源代码。
要是我真的给了,我的爬虫就几百来行代码,一张A4纸,他不会说,坑爹啊!!!……

都说现在是信息爆炸的时代,所以比的还是谁的数据挖掘能力强 Schreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmen

好吧,那么问题来了学习挖掘机(数据)技术到底哪家强?Schreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmenSchreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmenSchreiben Sie einen einfachen Webcrawler in Python, um Videos aufzunehmen

相关推荐:

Python编写的通知栏脚本启动工具

python编写图形界面如何利用aardio实现

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn