Python爬蟲爬取BT之家找電影資源


head.jpg

一、寫在前面
最近看新聞說聖城家園(SCG)倒了,之前BT天堂倒了,暴風影音也不行了,可以說看個電影越來越費力,國內大廠如企鵝和愛奇藝最近也出現一些幺蛾子,雖然目前版權意識雖然越來越強,但是很多資源在這些主流視頻網站上面依然沒有,我平時看電影又習慣下載下來再看,所以每次看電影找資源就很麻煩,花了點時間,於是就有了這個程序。
scjy.png

二、目的
輸入一部電影的名字,幫我到BT之家上面看看有沒有,如果有就把下載鏈接復制給我。

三、設計思路
本來想的是直接爬取首頁最近發布的電影,然后取判斷有沒有,后來想了一下,為什么不直接使用網站的搜索功能呢?

四、開始爬蟲

4.1.分析網站

打開網站搜索一個結果,發現在網址里面直接修改鏈接的內容就能到達搜索頁面,那這樣就更簡單。
1.png

先讓用戶輸入一部電影的名字,直接生成鏈接。

# 要求輸入電影名
inputname = input('\n' + '請輸入您要搜索的電影:')

# 鏈接是用網站的搜索功能
url = "http://www.6btbtt.com/search-index-keyword-" + inputname + ".htm"

接下來再看搜索結果是什么樣的,使用審查元素看看,就會看到搜索結果里面電影名字和鏈接會在一個a標簽里面,類型為subject_link thread-old read
2.png

至此網站就分析完成了

4.2.開始爬取過程

剛才已經得到了電影名和網站,那么下面直接獲得搜索結果頁面的內容就行,用requests獲取內容,獲取后順便用beautifulsoup解析一下,解析后的東西就是有格式的,這樣才能進行下一步操作。

# 獲取網頁內容並用beautifulsoup解析一下
soup = BeautifulSoup(requests.get(url).text,'lxml')

# 給出找到第一個結果,網站搜索結果就是把最新的排在前面,所以一個結果就夠了
movies = soup.find('a','subject_link thread-old')

然而現在我們是得到一段內容,它不光包含電影標題和鏈接,還包含其他的東西,我們要做的就是把電影標題和鏈接分別提取出來。

# 直接輸出電影和鏈接
try:
    link = movies.get('href')
    name = movies.text  ####這里用的是text,因為標簽下面還有標簽,是string無法獲取文本內容
    print('\n' + name)
    print(link + '\n')
except:
    print("沒有找到這部電影或程序發生未知錯誤")

這里用try和except來捕捉程序反饋,就是說假如獲取的內容有問題,那程序不崩潰,就執行其他的或者進行下一步操作

至此,我們已經得到了電影和鏈接了,爬蟲過程也算結束了。

4.3判斷爬取結果和用戶輸入

由於電影標題出來包含真正的電影名還包含清晰度、年代、格式等等這些信息,通常是這樣的

[BT下載][小丑][BD- MKV/2.12GB][英語中英字幕][1080P][DC年度精彩大片藍光版]

這些我們都不要,在把它分割出來,單獨取出電影名字,分割方法就是前面是 “下載][” 后面是“][”,取中間文本就可以。

# 這是用於從網頁的電影標題里面分割出真正的電影名
def get_str_btw(s,f,b):
    par = s.partition(f)
    return (par[2].partition(b))[0][:]

try:
    mname = (get_str_btw(name,"下載][","]["))
except:
    print("無法匹配搜索結果")

單獨取出電影名字后進行比對,這里只是簡單地進行文字匹配,本來應該可以多爬取幾個結果,然后模糊搜索進行匹配的。

# 判斷輸入的和獲取到的電影名字是否匹配
if mname == inputname:
    print("電影有啦!鏈接已復制!祝您觀影愉快!" + '\n')
    pyperclip.copy(link)
else:
    print("我給您找到了這個!")

最后再加上一個讓程序運行完等一下的命令

# 程序執行完不要馬上關閉窗口
os.system("pause")

至此,這個程序就完成了。

運行截圖
1.gif

五:注意事項

5.1.導入模塊的時候如果發現不能導入,可能是缺少c++運行庫,去下載官方工具安裝就行;
5.2網站里面看似相同的元素標簽可能不同,比如那個熱門電影和新電影標簽不一樣,一開始遍歷爬取的時候發現總是報錯;
5.3一定要用tryexcept來避免出現意外;

程序可能沒有意義,但生命不息,折騰不止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM