前回の記事のコメントを見ると、多くの子供靴はクローラーのソースコードに注目しているようです。この記事には、Python を使用してビデオ ダウンロード リソースをキャプチャするための簡単な Web クローラーを作成するための非常に詳細な記録が含まれており、これが皆さんの役に立つことを願っています。 5 月、私はブログ検索エンジンを作成しましたが、使用したクローラーは非常にインテリジェントで、少なくとも、「Here Comes the Movie!」という Web サイトで使用されているクローラーよりもはるかに高機能でした。
Python でのクローラーの作成の話題に戻ります。Python は、私が常に使用する主なスクリプト言語です。 Python の言語はシンプルかつ柔軟で、その標準ライブラリは電卓、テキスト エンコード変換、画像処理、バッチ ダウンロード、バッチ テキスト処理などとして使用できます。つまり、私はこのツールがとても気に入っており、使えば使うほど上手になるのですが、このような便利なツールについてはほとんどの人に教えていません。 。 。
強力な文字列処理機能と、urllib2、cookielib、re、threading などのモジュールの存在により、Python でクローラーを簡単に作成できます。どれだけ簡単にできるでしょうか?当時のクラスメートに、映画をまとめるために使用したいくつかのクローラーと散在するスクリプトのスクリプト コードの総行数は 1,000 行を超えず、「映画を書きに来る」という Web サイトには 150 行程度しかなかったと話しました。コード。クローラーのコードは別の64ビットBlack Apple上にあるので記載しません。VPS上のWebサイトのコードのみ記載します
[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
あるベイの最新のビデオダウンロードリソースを例に挙げます。そのウェブサイトのアドレスは
http://piratebay.se/browse/200です
このウェブページには広告がたくさんあるので、ここだけを紹介します。メインコンテンツを投稿します:
Python クローラーの場合は、このページのソース コードをダウンロードしてください。コードは 1 行で十分です。ここでは urllib2 ライブラリが使用されます。
>>> import urllib2 >>> html = urllib2.urlopen('http://某piratebay.se/browse/200').read() >>> print 'size is', len(html) size is 52977
もちろん、OS モジュールのシステム関数を使用して、wget コマンドを呼び出して Web コンテンツをダウンロードすることもできます。これは、wget または Curl ツールを習得した学生にとっては非常に便利です。
Firebugを使ってWebページの構造を観察すると、本文中のhtmlがテーブルであることがわかります。各リソースは tr タグです。
各リソースについて、抽出する必要がある情報は次のとおりです:
1、ビデオカテゴリ
2、リソース名3、リソースリンク
4、リソースサイズ
5、アップロード時間
これで十分です、そして必要に応じて増やすことができます。
まず、tr タグ内のコードを抽出して確認します。
<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="Python でビデオをキャプチャするための簡単な Web クローラーを作成する" ><img src="//static.某piratebay.se/img/11x11p.png" / alt="Python でビデオをキャプチャするための簡単な Web クローラーを作成する" > <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>
以下では、正規表現を使用して HTML コード内のコンテンツを抽出します。正規表現について知らない学生は、http://docs.python.org/2/library/re.html にアクセスして詳細を学ぶことができます。
HTML または DOM ツリーを解析するために他のツールの代わりに正規表現を使用する必要があるのには理由があります。以前、BeautifulSoup3 を使用してコンテンツを抽出しようとしましたが、速度が非常に遅く、1 秒間に 100 個のコンテンツを処理できるのはすでに私のコンピューターの限界であることがわかりました。 。 。しかし、正規表現を変更し、コンパイル後にコンテンツを処理することで、速度が直接的に低下します。
非常に多くのコンテンツを抽出するには、正規表現をどのように記述すればよいでしょうか?
私の過去の経験から言えば、
「.*?」または「.+?」が非常に便利です。ただし、いくつかの小さな問題にも注意する必要があります。実際に使用するとわかります上記の tr タグ コードでは、まず式のシンボルを
もちろん、コンテンツを表すために、必要なコンテンツを見逃さない限り、他のものでも構いません。次に、ビデオ分類を取得するために、一致させたいコンテンツは次のとおりです。
(TV)
次に、リソース リンク
、その後、他のリソース情報に移動し、
font class="detDesc">アップロード 3 分ago、サイズ 2 GiB、アップローダー
決勝戦
もちろん、最終的な一致を正規表現で表現する必要はありません。開始位置が正しければ、後で情報が取得される位置も正しくなります。
正規表現に精通している友人は、正規表現の書き方を知っているかもしれません。私が書いた式処理プロセスを紹介します
就这么简单,结果出来了,自我感觉挺欢喜的。
当然,这样设计的爬虫是有针对性的,定向爬取某一个站点的内容。也没有任何一个爬虫不会对收集到的链接进行筛选。通常可以使用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纸,他不会说,坑爹啊!!!……
都说现在是信息爆炸的时代,所以比的还是谁的数据挖掘能力强
好吧,那么问题来了学习挖掘机(数据)技术到底哪家强?
相关推荐:
以上がPython でビデオをキャプチャするための簡単な Web クローラーを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。