最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python編寫簡單網(wǎng)絡(luò)爬蟲抓取視頻下載資源

 更新時間:2014年11月04日 16:29:50   投稿:hebedich  
從上一篇文章的評論中看出似乎很多童鞋都比較關(guān)注爬蟲的源代碼。所有本文就使用Python編寫簡單網(wǎng)絡(luò)爬蟲抓取視頻下載資源做了很詳細的記錄,幾乎每一步都介紹給大家,希望對大家能有所幫助

我第一次接觸爬蟲這東西是在今年的5月份,當(dāng)時寫了一個博客搜索引擎,所用到的爬蟲也挺智能的,起碼比電影來了這個站用到的爬蟲水平高多了!

回到用Python寫爬蟲的話題。

Python一直是我主要使用的腳本語言,沒有之一。Python的語言簡潔靈活,標(biāo)準(zhǔn)庫功能強大,平??梢杂米饔嬎闫鳎谋揪幋a轉(zhuǎn)換,圖片處理,批量下載,批量處理文本等??傊液芟矚g,也越用越上手,這么好用的一個工具,一般人我不告訴他。。。

因為其強大的字符串處理能力,以及urllib2,cookielib,re,threading這些模塊的存在,用Python來寫爬蟲就簡直易于反掌了。簡單到什么程度呢。我當(dāng)時跟某同學(xué)說,我寫電影來了用到的幾個爬蟲以及數(shù)據(jù)整理的一堆零零散散的腳本代碼行數(shù)總共不超過1000行,寫電影來了這個網(wǎng)站也只有150來行代碼。因為爬蟲的代碼在另外一臺64位的黑蘋果上,所以就不列出來,只列一下VPS上網(wǎng)站的代碼,tornadoweb框架寫的 :)

[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

下面直接show一下爬蟲的編寫流程。以下內(nèi)容僅供交流學(xué)習(xí)使用,沒有別的意思。

以某灣的最新視頻下載資源為例,其網(wǎng)址是

http://某piratebay.se/browse/200

因為該網(wǎng)頁里有大量廣告,只貼一下正文部分內(nèi)容:

對于一個python爬蟲,下載這個頁面的源代碼,一行代碼足以。這里用到urllib2庫。

>>> import urllib2
>>> html = urllib2.urlopen('http://某piratebay.se/browse/200').read()
>>> print 'size is', len(html)
size is 52977

當(dāng)然,也可以用os模塊里的system函數(shù)調(diào)用wget命令來下載網(wǎng)頁內(nèi)容,對于掌握了wget或者curl工具的同學(xué)是很方便的。

使用Firebug觀察網(wǎng)頁結(jié)構(gòu),可以知道正文部分html是一個table。每一個資源就是一個tr標(biāo)簽。

而對于每一個資源,需要提取的信息有:

1、視頻分類
2、資源名稱
3、資源鏈接
4、資源大小
5、上傳時間

就這么多就夠了,如果有需要,還可以增加。

首先提取一段tr標(biāo)簽里的代碼來觀察一下。

<tr>
  <td class="vertTh">
   <center>
    <a href="/browse/200" title="此目錄中更多">視頻</a><br />
    (<a href="/browse/205" title="此目錄中更多">電視</a>)
   </center>
  </td>
  <td>
<div class="detName">   <a href="/torrent/7782194/The_Walking_Dead_Season_3_Episodes_1-3_HDTV-x264" class="detLink" title="細節(jié) The Walking Dead Season 3 Episodes 1-3 HDTV-x264">The Walking Dead Season 3 Episodes 1-3 HDTV-x264</a>
</div>
<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="http://static.某piratebay.se/img/icon-magnet.gif" alt="Magnet link" /></a>   <a href="http://torrents.某piratebay.se/7782194/The_Walking_Dead_Season_3_Episodes_1-3_HDTV-x264.7782194.TPB.torrent" title="下載種子"><img src="http://static.某piratebay.se/img/dl.gif" class="dl" alt="下載" /></a><img src="http://static.某piratebay.se/img/11x11p.png" /><img src="http://static.某piratebay.se/img/11x11p.png" />
   <font class="detDesc">已上傳 <b>3&nbsp;分鐘前</b>, 大小 2&nbsp;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代碼中的內(nèi)容。對正則表達式不了解的同學(xué),可以去 http://docs.python.org/2/library/re.html 了解一下。

為何要用正則表達式而不用其他一些解析HTML或者DOM樹的工具是有原因的。我之前試過用BeautifulSoup3來提取內(nèi)容,后來發(fā)覺速度實在是慢死了啊,一秒鐘能夠處理100個內(nèi)容,已經(jīng)是我電腦的極限了。。。而換了正則表達式,編譯后處理內(nèi)容,速度上直接把它秒殺了!

提取這么多內(nèi)容,我的正則表達式要如何寫呢?

根據(jù)我以往的經(jīng)驗,“.*?”或者“.+?”這個東西是很好使的。不過也要注意一些小問題,實際用到的時候就會知道 :)

對于上面的tr標(biāo)簽代碼,我首先需要讓我的表達式匹配到的符號是

<tr>

表示內(nèi)容的開始,當(dāng)然也可以是別的,只要不要錯過需要的內(nèi)容即可。然后我要匹配的內(nèi)容是下面這個,獲取視頻分類。

(<a href="/browse/205" title="此目錄中更多">電視</a>)

接著我要匹配資源鏈接了,

<a href="..." class="detLink" title="...">...</a>

再到其他資源信息,

font class="detDesc">已上傳 <b>3&nbsp;分鐘前</b>, 大小 2&nbsp;GiB, 上傳者

最后匹配

</tr>

大功告成!

當(dāng)然,最后的匹配可以不需要在正則表達式里表示出來,只要開始位置定位正確了,后面獲取信息的位置也就正確了。

對正則表達式比較了解的朋友,可能知道怎么寫了。我Show一下我寫的表達式處理過程,

就這么簡單,結(jié)果出來了,自我感覺挺歡喜的。

當(dāng)然,這樣設(shè)計的爬蟲是有針對性的,定向爬取某一個站點的內(nèi)容。也沒有任何一個爬蟲不會對收集到的鏈接進行篩選。通??梢允褂肂FS(寬度優(yōu)先搜索算法)來爬取一個網(wǎng)站的所有頁面鏈接。

完整的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)
    # 下載數(shù)據(jù)
    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]
        )
        # 保存到數(shù)據(jù)庫
        db.priate.save(values)
print 'Done!'

以上代碼僅供思路展示,實際運行使用到mongodb數(shù)據(jù)庫,同時可能因為無法訪問某灣網(wǎng)站而無法得到正常結(jié)果。

所以說,電影來了網(wǎng)站用到的爬蟲不難寫,難的是獲得數(shù)據(jù)后如何整理獲取有用信息。例如,如何匹配一個影片信息跟一個資源,如何在影片信息庫和視頻鏈接之間建立關(guān)聯(lián),這些都需要不斷嘗試各種方法,最后選出比較靠譜的。

曾有某同學(xué)發(fā)郵件想花錢也要得到我的爬蟲的源代碼。
要是我真的給了,我的爬蟲就幾百來行代碼,一張A4紙,他不會說,坑爹?。。?!……

都說現(xiàn)在是信息爆炸的時代,所以比的還是誰的數(shù)據(jù)挖掘能力強 :D

好吧,那么問題來了學(xué)習(xí)挖掘機(數(shù)據(jù))技術(shù)到底哪家強?:D:D:D

相關(guān)文章

  • Python 的可變和不可變對象詳情

    Python 的可變和不可變對象詳情

    本文通過詳情描述Python 中的可變對象與不可變對象來看兩者的區(qū)別,剛興趣的朋友可以參考下文
    2021-08-08
  • python實現(xiàn)人臉識別代碼

    python實現(xiàn)人臉識別代碼

    這篇文章主要介紹了python實現(xiàn)人臉識別代碼,還是比較不錯的,這里分享個大家,共需要的朋友參考。
    2017-11-11
  • python 函數(shù)進階之閉包函數(shù)

    python 函數(shù)進階之閉包函數(shù)

    這篇文章主要介紹了python 函數(shù)進階之閉包函數(shù),內(nèi)函數(shù)使用了外函數(shù)的局部變量,并且外函數(shù)把內(nèi)函數(shù)返回出來的過程叫做閉包,里面的內(nèi)函數(shù)是閉包函數(shù),下文相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • python提取word文件中的圖片并上傳阿里云OSS

    python提取word文件中的圖片并上傳阿里云OSS

    這篇文章主要介紹了通過Python提取Word文件中的所有圖片,并將其上傳至阿里云OSS。文中的示例代碼對學(xué)習(xí)Python有一定的幫助,快跟隨小編一起學(xué)習(xí)一下吧
    2021-12-12
  • Python?Timer和TimerFPS計時工具類

    Python?Timer和TimerFPS計時工具類

    這篇文章主要介紹了Python?Timer和TimerFPS計時工具類,文章分享得代碼內(nèi)容詳細,具有一的的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • python中l(wèi)ist*n生成多維數(shù)組與for循環(huán)生成多維數(shù)組的區(qū)別說明

    python中l(wèi)ist*n生成多維數(shù)組與for循環(huán)生成多維數(shù)組的區(qū)別說明

    這篇文章主要介紹了python中l(wèi)ist*n生成多維數(shù)組與for循環(huán)生成多維數(shù)組的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 揭秘Python高效編程十招必備技巧

    揭秘Python高效編程十招必備技巧

    這篇文章主要為大家介紹了Python高效編程十招必備技巧實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • 利用Python打造一個Excel記賬模板

    利用Python打造一個Excel記賬模板

    這篇文章主要為大家詳細介紹了如何使用Python打造一個超實用的Excel記賬模板,可以幫助大家高效管理財務(wù),邁向財富自由之路,感興趣的小伙伴快跟隨小編一起來學(xué)習(xí)一下吧
    2025-04-04
  • 基于Python實現(xiàn)智能天氣提醒助手

    基于Python實現(xiàn)智能天氣提醒助手

    這篇文章主要來和大家分享一個實用的Python天氣提醒助手開發(fā)方案,這個工具可以方便地集成到青龍面板或其他調(diào)度框架中使用,有需要的小伙伴可以參考一下
    2025-05-05
  • Python基于similarities實現(xiàn)文本語義相似度計算和文本匹配搜索

    Python基于similarities實現(xiàn)文本語義相似度計算和文本匹配搜索

    similarities?實現(xiàn)了多種相似度計算、匹配搜索算法,支持文本、圖像,python3開發(fā),下面我們就來看看如何使用similarities實現(xiàn)文本語義相似度計算和文本匹配搜索吧
    2024-03-03

最新評論

天长市| 泰来县| 太康县| 保靖县| 大田县| 阿巴嘎旗| 墨江| 鄂伦春自治旗| 武功县| 隆子县| 惠来县| 曲周县| 巴里| 洛宁县| 静宁县| 资讯 | 昌都县| 漳浦县| 营口市| 浪卡子县| 南康市| 西青区| 秦安县| 富裕县| 板桥市| 娄烦县| 双牌县| 滦平县| 揭阳市| 堆龙德庆县| 深泽县| 尚志市| 商水县| 大安市| 若羌县| 巴楚县| 西贡区| 防城港市| 晋宁县| 宁安市| 尚志市|