目標(biāo)網(wǎng)站:http://www.dy2018.com/
這是我們要下載的最新資源在這個頁面:http://www.dy2018.com/html/gndy/dyzz/index.html
前提
- 安裝 python, 版本 3.5 以上
- 安裝 pip (有些 python 安裝包里面已經(jīng)自帶了)
- 然后用 pip 安裝 requests,在命令行輸入命令:
pip install requests
- 用 pip 安裝 requests_cache:
pip install requests_cache
初步嘗試
好了掐隐,我們新建個腳本文件叫 t.py
:
import requests
import requests_cache
requests_cache.install_cache('demo_cache') # 為 requests 建立緩存商架,避免每次執(zhí)行都去請求一次網(wǎng)頁,造成時間浪費
# 把我們的爬蟲偽裝成瀏覽器,否則服務(wù)器會拒絕你的請求
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)
在命令行運行一次 python t.py
,我們就可以看到它輸出了網(wǎng)頁源碼书斜,第一步算是完成了诬辈。
提取列表頁URL
打開剛才的網(wǎng)頁,因為一開始會有廣告荐吉,所以我們先在任意位置點擊一下這個頁面焙糟,讓廣告彈出來就可以了。
然后鼠標(biāo)移向電影標(biāo)題 --> 右鍵點擊 --> 點擊【檢查元素】或【Inspect】(如果你的游覽器沒有這個功能样屠,請下載基于 Chrome 的瀏覽器穿撮,如 360瀏覽器等)
然后我們會看到這樣的界面:
紅箭頭所指就是本頁所有電影標(biāo)題都有的類名,待會我們就可以根據(jù)這個類名一次性提取出所有電影標(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)
要想正確運行這段代碼悦穿,你還得先安裝一些 python 庫:
pip install lxml
pip install beautifulsoup4
然后再次執(zhí)行 python t.py
就會看到如下輸出:
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)點進(jìn)電影頁业踢,然后通過檢查元素(上一步有介紹)咧党,得到下載鏈接的元素選擇器,當(dāng)然這次的有點復(fù)雜陨亡,不像上一步那么直觀,還需要自己推導(dǎo)深员,具體過程就不說了负蠕,直接給出結(jié)果:#Zoom table a
這一次在代碼中,我們需要通過上一步獲得的 links 數(shù)組分別進(jìn)入每個電影頁倦畅,然后拿到下載鏈接遮糖,部分代碼如下:
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é)果是一個數(shù)組叠赐,所以我們需要選擇第一個元素
注釋2欲账,每次請求一次就讓程序睡眠1~2秒,是為了不給對方服務(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:死無對證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))