python爬蟲批量獲取最新電影資源

目標(biāo)網(wǎng)站:http://www.dy2018.com/
這是我們要下載的最新資源在這個(gè)頁面:http://www.dy2018.com/html/gndy/dyzz/index.html

image.png

前提

  • 安裝 python, 版本 3.5 以上
  • 安裝 pip (有些 python 安裝包里面已經(jīng)自帶了)
  • 然后用 pip 安裝 requests,在命令行輸入命令:pip install requests
  • 用 pip 安裝 requests_cache: pip install requests_cache

初步嘗試

好了,我們新建個(gè)腳本文件叫 t.py:

import requests
import requests_cache

requests_cache.install_cache('demo_cache') # 為 requests 建立緩存,避免每次執(zhí)行都去請(qǐng)求一次網(wǎng)頁,造成時(shí)間浪費(fèi)

# 把我們的爬蟲偽裝成瀏覽器,否則服務(wù)器會(huì)拒絕你的請(qǐng)求
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
}

response = requests.get("http://www.dy2018.com/html/gndy/dyzz/index.html", headers=headers)
html_doc = response.content.decode('gbk') # 由于此網(wǎng)頁是 gb2312 編碼的,需要轉(zhuǎn)碼成 utf8,但 python 貌似不支持 gb2312,所以用 gbk
print(html_doc)

在命令行運(yùn)行一次 python t.py,我們就可以看到它輸出了網(wǎng)頁源碼,第一步算是完成了。

提取列表頁URL

打開剛才的網(wǎng)頁,因?yàn)橐婚_始會(huì)有廣告,所以我們先在任意位置點(diǎn)擊一下這個(gè)頁面,讓廣告彈出來就可以了。

然后鼠標(biāo)移向電影標(biāo)題 --> 右鍵點(diǎn)擊 --> 點(diǎn)擊【檢查元素】或【Inspect】(如果你的游覽器沒有這個(gè)功能,請(qǐng)下載基于 Chrome 的瀏覽器,如 360瀏覽器等)

然后我們會(huì)看到這樣的界面:

image.png

紅箭頭所指就是本頁所有電影標(biāo)題都有的類名,待會(huì)我們就可以根據(jù)這個(gè)類名一次性提取出所有電影標(biāo)題了,見代碼:

import requests
import os
import requests_cache

from bs4 import BeautifulSoup

requests_cache.install_cache('demo_cache')

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
}

response = requests.get("http://www.dy2018.com/html/gndy/dyzz/index.html", headers=headers)
html_doc = response.content.decode('gbk')
# print(html_doc)

soup = BeautifulSoup(html_doc, 'lxml')
links = []
for a in soup.select('.ulink'):
     + a['href']
    title = a.string
    links.append(href)
    print(href, title)

要想正確運(yùn)行這段代碼,你還得先安裝一些 python 庫:

pip install lxml 
pip install beautifulsoup4

然后再次執(zhí)行 python t.py 就會(huì)看到如下輸出:

http://www.dy2018.com/i/98372.html 2017年國產(chǎn)喜劇片《父子雄兵》HD國語中字
http://www.dy2018.com/i/98369.html 2017年國產(chǎn)奇幻片《鮫珠傳》HD高清國語中英雙字
http://www.dy2018.com/i/98364.html 2017年歐美科幻片《變形金剛5最后的騎士》HD韓版中英雙字
......更多的就不列出來了

從列表頁進(jìn)入電影頁,并提取下載鏈接

我們先鼠標(biāo)點(diǎn)進(jìn)電影頁,然后通過檢查元素(上一步有介紹),得到下載鏈接的元素選擇器,當(dāng)然這次的有點(diǎn)復(fù)雜,不像上一步那么直觀,還需要自己推導(dǎo),具體過程就不說了,直接給出結(jié)果:#Zoom table a

這一次在代碼中,我們需要通過上一步獲得的 links 數(shù)組分別進(jìn)入每個(gè)電影頁,然后拿到下載鏈接,部分代碼如下:

for link in links:
    response = requests.get(link, headers=headers)
    html_doc = response.content.decode('gbk')
    soup = BeautifulSoup(html_doc, 'lxml')
    ftp_element = soup.select('#Zoom table a')[0] ### 注釋1
    download_link = ftp_element['href']
    print(download_link)
    time.sleep(random.randint(1, 2)) ### 注釋2

注意:
注釋1,由于 select() 的結(jié)果是一個(gè)數(shù)組,所以我們需要選擇第一個(gè)元素
注釋2,每次請(qǐng)求一次就讓程序睡眠1~2秒,是為了不給對(duì)方服務(wù)器造成太大壓力

再次執(zhí)行 python t.py 就可以看到我們要的下載鏈接了:

ftp://d:d@dygodj8.com:12311/[電影天堂www.dy2018.com]父子雄兵HD國語中字.mkv
ftp://d:d@dygodj8.com:12311/[電影天堂www.dy2018.com]鮫珠傳HD高清國語中英雙字.mkv
ftp://d:d@dygodj8.com:12311/[電影天堂www.dy2018.com]變形金剛5最后的騎士HD韓版中英雙字.mkv
ftp://y:y@dygod18.com:15132/[電影天堂www.dy2018.com]加勒比海盜5:死無對(duì)證HD高清中英雙字.rmvb
......更多的就不貼出來了

當(dāng)然上面那段代碼直接拿去是執(zhí)行不了的,

完整代碼如下:

import requests
import os
import random
import time
import requests_cache

from bs4 import BeautifulSoup

requests_cache.install_cache('demo_cache')

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
}

response = requests.get("http://www.dy2018.com/html/gndy/dyzz/index.html", headers=headers)
html_doc = response.content.decode('gbk')
# print(html_doc)

soup = BeautifulSoup(html_doc, 'lxml')
links = []
for a in soup.select('.ulink'):
     + a['href']
    title = a.string
    links.append(href)
    # print(href, title)

for link in links:
    response = requests.get(link, headers=headers)
    html_doc = response.content.decode('gbk')
    soup = BeautifulSoup(html_doc, 'lxml')
    ftp_element = soup.select('#Zoom table a')[0]
    download_link = ftp_element['href']
    print(download_link)
    time.sleep(random.randint(1, 2))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,822評(píng)論 6 427
  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富,涉及面非常廣。awesome-p...
    若與閱讀 19,291評(píng)論 4 417
  • 環(huán)境管理管理Python版本和環(huán)境的工具。p–非常簡單的交互式python版本管理工具。pyenv–簡單的Pyth...
    MrHamster閱讀 3,949評(píng)論 1 61
  • 一個(gè)概念的掌握需要溫故而知新的持續(xù),今天的文章是這周概念的總結(jié),原以為概念已經(jīng)記得很清楚了,沒想到看到“你越弱,你...
    問之成兮閱讀 164評(píng)論 0 0
  • 旁白:看似平靜的一天,根本不平靜。只因?yàn)樵谠缟螦大學(xué)心理系發(fā)生了一件事情,故事便由此開始。 旁白:早晨學(xué)長剛剛晨跑...
    千詭閱讀 420評(píng)論 0 0

友情鏈接更多精彩內(nèi)容