Écrivez un simple robot d'exploration Web en Python pour capturer des vidéos

不言
Libérer: 2018-04-18 15:34:14
original
7494 Les gens l'ont consulté

D'après les commentaires de l'article précédent, il semble que de nombreuses chaussures pour enfants accordent plus d'attention au code source des robots. Tout cet article contient un enregistrement très détaillé de l'utilisation de Python pour écrire un simple robot d'exploration Web permettant de capturer des ressources de téléchargement de vidéos. Presque chaque étape est présentée à tout le monde. J'espère que cela pourra être utile à tout le monde

C'est ma première fois. entrer en contact avec des robots d'exploration. C'est en mai de cette année que j'ai écrit un moteur de recherche de blog. Le robot d'exploration utilisé était assez intelligent, du moins beaucoup plus élevé que celui utilisé par le site Here Comes the Movie !

Retour au sujet de l'écriture de robots d'exploration en Python.

Python a toujours été mon principal langage de script, sans exception. Le langage de Python est simple et flexible, et sa bibliothèque standard est puissante. Il peut être utilisé comme calculatrice, conversion d'encodage de texte, traitement d'images, téléchargement par lots, traitement de texte par lots, etc. En bref, je l’aime beaucoup, et plus je l’utilise, mieux je m’en sors. Je ne parle pas à la plupart des gens d’un outil aussi utile. . .

En raison de ses puissantes capacités de traitement de chaînes et de l'existence de modules tels que urllib2, cookielib, re et threading, il est facile d'écrire des robots d'exploration en Python. À quel point cela peut-il être simple ? À l'époque, j'ai dit à un camarade de classe que le nombre total de lignes de code de script pour les différents robots d'exploration et scripts dispersés que j'avais utilisés pour compiler le film Here Comes ne dépassait pas 1 000, et que le site Web Here Comes, un film, n'en contenait qu'environ 1 000. 150 lignes de code. Parce que le code du robot est sur une autre Black Apple 64 bits, je ne le listerai pas, je ne listerai que le code du site Web sur le VPS. Le framework tornadoweb l'a écrit Écrivez un simple robot dexploration Web en Python pour capturer des vidéos

[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
Copier après la connexion
et montrez-le directement ci-dessous. Le processus d'écriture du robot.

Le contenu suivant est uniquement destiné à des fins de communication et d'apprentissage et n'a aucune autre signification.

Prenons comme exemple la dernière ressource de téléchargement vidéo d'une certaine baie, son URL est

http://piratebay.se/browse/200

Parce que cette page web Il y a beaucoup de publicités, je ne posterai donc que le contenu principal :

Pour un robot python, téléchargez le code source de cette page, une ligne de le code suffit. La bibliothèque urllib2 est utilisée ici.

>>> import urllib2
>>> html = urllib2.urlopen('http://某piratebay.se/browse/200').read()
>>> print 'size is', len(html)
size is 52977
Copier après la connexion
Bien sûr, vous pouvez également utiliser la fonction système du module os pour appeler la commande wget afin de télécharger du contenu Web. Ceci est très pratique pour les étudiants qui maîtrisent les outils wget ou curl.

Utilisez Firebug pour observer la structure de la page Web, et vous pourrez savoir que le code HTML dans le texte principal est un tableau. Chaque ressource est une balise tr.

Pour chaque ressource, les informations qui doivent être extraites sont :

Classification de la vidéo

Nom de la ressource
3. Lien de ressource
4. Taille de la ressource
5. Temps de téléchargement

C'est suffisant, et vous pouvez l'augmenter si nécessaire.

Tout d’abord, extrayez un morceau de code dans la balise tr pour y jeter un œil.

<tr>
  <td class="vertTh">
   <center>
    <a href="/browse/200" title="此目录中更多">视频</a><br />
    (<a href="/browse/205" title="此目录中更多">电视</a>)
   </center>
  </td>
  <td>
<p class="detName">   <a href="/torrent/7782194/The_Walking_Dead_Season_3_Episodes_1-3_HDTV-x264" class="detLink" title="细节 The Walking Dead Season 3 Episodes 1-3 HDTV-x264">The Walking Dead Season 3 Episodes 1-3 HDTV-x264</a>
</p>
<a href="magnet:?xt=urn:btih:4f63d58e51c1a4a997c6f099b2b529bdbba72741&dn=The+Walking+Dead+Season+3+Episodes+1-3+HDTV-x264&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80" title="Download this torrent using magnet"><img src="//static.某piratebay.se/img/icon-magnet.gif" alt="Magnet link" /></a>   <a href="//torrents.某piratebay.se/7782194/The_Walking_Dead_Season_3_Episodes_1-3_HDTV-x264.7782194.TPB.torrent" title="下载种子"><img src="//static.某piratebay.se/img/dl.gif" class="dl" alt="下载" /></a><img  src="//static.某piratebay.se/img/11x11p.png" / alt="Écrivez un simple robot d'exploration Web en Python pour capturer des vidéos" ><img  src="//static.某piratebay.se/img/11x11p.png" / alt="Écrivez un simple robot d'exploration Web en Python pour capturer des vidéos" >
   <font class="detDesc">已上传 <b>3 分钟前</b>, 大小 2 GiB, 上传者 <a class="detDesc" href="/user/paridha/" title="浏览 paridha">paridha</a></font>
  </td>
  <td align="right">0</td>
  <td align="right">0</td>
 </tr>
Copier après la connexion
Ce qui suit utilise des expressions régulières pour extraire le contenu du code html. Les étudiants qui ne connaissent pas les expressions régulières peuvent consulter http://docs.python.org/2/library/re.html pour en savoir plus.

Il y a une raison pour laquelle vous devriez utiliser des expressions régulières au lieu de certains autres outils pour analyser les arbres HTML ou DOM. J'ai déjà essayé d'utiliser BeautifulSoup3 pour extraire du contenu, mais j'ai découvert plus tard que la vitesse était très lente. Pouvoir traiter 100 éléments de contenu en une seconde était déjà la limite de mon ordinateur. . . Mais en changeant l'expression régulière et en traitant le contenu après compilation, la vitesse le tue directement !

Comment écrire mon expression régulière pour extraire autant de contenu ?

D'après mon expérience passée,

« .* ? » ou « .+ ? » est très utile. Cependant, nous devons également prêter attention à quelques petits problèmes. Vous saurez quand vous l'utiliserez réellement Écrivez un simple robot dexploration Web en Python pour capturer des vidéos

Pour le code de la balise tr ci-dessus, je dois d'abord faire correspondre mon expression au symbole.

indique le début du contenu. Bien sûr, cela peut aussi être autre chose, à condition de ne pas manquer le contenu requis. Ensuite, le contenu que je souhaite faire correspondre est le suivant, pour obtenir la classification vidéo.

(TV)

Ensuite, je dois faire correspondre le lien de la ressource,

...

vers d'autres informations sur les ressources,

font class="detDesc">Téléchargéil y a 3 minutes, taille 2 GiB, téléchargé par

Dernier match

Fait !

Bien sûr, la correspondance finale n'a pas besoin d'être exprimée dans l'expression régulière. Tant que la position de départ est correcte, la position où les informations sont obtenues ultérieurement sera également correcte.

Les amis qui connaissent les expressions régulières savent peut-être comment les écrire. Laissez-moi vous montrer le processus de traitement d'expression que j'ai écrit,

就这么简单,结果出来了,自我感觉挺欢喜的。

当然,这样设计的爬虫是有针对性的,定向爬取某一个站点的内容。也没有任何一个爬虫不会对收集到的链接进行筛选。通常可以使用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;
Copier après la connexion

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

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

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

都说现在是信息爆炸的时代,所以比的还是谁的数据挖掘能力强 Écrivez un simple robot dexploration Web en Python pour capturer des vidéos

好吧,那么问题来了学习挖掘机(数据)技术到底哪家强?Écrivez un simple robot dexploration Web en Python pour capturer des vidéosÉcrivez un simple robot dexploration Web en Python pour capturer des vidéosÉcrivez un simple robot dexploration Web en Python pour capturer des vidéos

相关推荐:

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!