欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

使用Python編寫簡單網絡爬蟲抓取視頻下載資源

系統 2593 0

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

回到用Python寫爬蟲的話題。

Python一直是我主要使用的腳本語言,沒有之一。Python的語言簡潔靈活,標準庫功能強大,平常可以用作計算器,文本編碼轉換,圖片處理,批量下載,批量處理文本等。總之我很喜歡,也越用越上手,這么好用的一個工具,一般人我不告訴他。。。

因為其強大的字符串處理能力,以及urllib2,cookielib,re,threading這些模塊的存在,用Python來寫爬蟲就簡直易于反掌了。簡單到什么程度呢。我當時跟某同學說,我寫電影來了用到的幾個爬蟲以及數據整理的一堆零零散散的腳本代碼行數總共不超過1000行,寫電影來了這個網站也只有150來行代碼。因為爬蟲的代碼在另外一臺64位的黑蘋果上,所以就不列出來,只列一下VPS上網站的代碼,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一下爬蟲的編寫流程。 以下內容僅供交流學習使用,沒有別的意思。

以某灣的最新視頻下載資源為例,其網址是

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

因為該網頁里有大量廣告,只貼一下正文部分內容:

使用Python編寫簡單網絡爬蟲抓取視頻下載資源_第1張圖片

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

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

當然,也可以用os模塊里的system函數調用wget命令來下載網頁內容,對于掌握了wget或者curl工具的同學是很方便的。

使用Firebug觀察網頁結構,可以知道正文部分html是一個table。每一個資源就是一個tr標簽。

使用Python編寫簡單網絡爬蟲抓取視頻下載資源_第2張圖片

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

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

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

首先提取一段tr標簽里的代碼來觀察一下。

          
??
???

???? 視頻

????( 電視 )
???

??
??

Magnet link ??? 下載
??? 已上傳 3?分鐘前 , 大小 2?GiB, 上傳者 paridha
??
??0
??0
?

下面用正則表達式來提取html代碼中的內容。對正則表達式不了解的同學,可以去 http://docs.python.org/2/library/re.html 了解一下。

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

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

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

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

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

( 電視 )

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

...

再到其他資源信息,

font class="detDesc">已上傳 3?分鐘前 , 大小 2?GiB, 上傳者

最后匹配

大功告成!

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

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

使用Python編寫簡單網絡爬蟲抓取視頻下載資源_第3張圖片

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

當然,這樣設計的爬蟲是有針對性的,定向爬取某一個站點的內容。 也沒有任何一個爬蟲不會對收集到的鏈接進行篩選。通常可以使用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'.+?\(.+?">(.+?).+?class="detLink".+?">(.+?).+? (.+?) , 大小 (.+?),', 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紙,他不會說,坑爹啊!!!……

都說現在是信息爆炸的時代,所以比的還是誰的數據挖掘能力強 :D

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 午夜影院在线免费观看 | 久久一区视频 | 精品性久久 | 成人国产精品一区二区毛片在线 | www国产精品| 91精品一区二区三区久久久久久 | 日本aⅴ在线观看 | 人妻体内射精一区二区三四 | 一类黄色大片 | 日韩欧美视频在线一区二区 | 久久久久免费 | 毛片在线播放网址 | 国产免费又色又爽又黄的网站 | 中国黄色一级生活片 | 国产精品久久久久久久久久久搜索 | 日韩中文字幕在线看 | 日韩欧美专区 | 影音先锋中文字幕一区 | 欧美福利在线 | 欧美一区二区免费 | 57pao成人永久免费视频 | 丰满年轻岳中文字幕一区二区 | 免费观看国产大片资源视频 | 欧美在线日韩 | 天天摸天天操天天干 | 亚洲精品久久婷婷丁香51 | 九九九精品视频免费 | 欧美精品久久久久久久免费观看 | 色综合天天综合网国产成人 | 国变精品美女久久久久av爽 | 亚洲特级aaaaaa毛片 | 免费亚洲网站 | 久久99精品视频 | 97精品国产 | 欧美淫 | 添人人躁日日躁夜夜躁夜夜揉 | 精品国产一区二区三区久久 | 5060午夜网 | 国产h视频在线观看高清 | 欧美视频在线第一页 | 成人啪啪97丁香 |