【Python爬蟲】- 陽光電影網(wǎng)國內(nèi)電影資源抓取

目錄


一、 爬蟲的邏輯
二、XPath 爬取網(wǎng)站的數(shù)據(jù)
三、函數(shù)封裝
四、運(yùn)行結(jié)果

一、 爬蟲的邏輯


作業(yè)內(nèi)容是抓取陽光電影網(wǎng)的下載鏈接:也就是「國內(nèi)電影」標(biāo)簽頁面下,第一頁至第七頁的電影的所有下載鏈接。

先看看網(wǎng)站頁面之間的關(guān)系:

網(wǎng)站主頁 -> 導(dǎo)航欄 -> 國內(nèi)電影頁(點(diǎn)擊標(biāo)簽?zāi)J(rèn)進(jìn)入第一頁)
-> 具體電影頁面 -> 迅雷下載鏈接

整體的思路:

  • 先獲取國內(nèi)電影頁面第一頁的源代碼;
  • 將源代碼的字符串類型轉(zhuǎn)換為 selector 對(duì)象,把它的值賦予變量 HTML;
  • 用 XPath 提取出變量 html 中的文本,并把它放入一個(gè)列表中;
  • 提取的文本有兩個(gè)部分,一個(gè)部分是國內(nèi)電影頁面的第一頁的所有影片標(biāo)題,另一部分是第一頁所有影片標(biāo)題的 URL(點(diǎn)擊它可進(jìn)入具體電影頁面),我們將它賦值給變量 new_html;
  • 用 XPath 提取出變量 new_html 中的文本,并把它放入一個(gè)列表中;
  • 這一次提取的文本包括下載鏈接;
  • 把列表的文本打印出來,文本就是電影信息和下載鏈接;
  • 修改獲取范圍為第一頁至第七頁的源代碼,再打印一次;

二、XPath 爬取網(wǎng)站的數(shù)據(jù)


第一次打?。ㄟ\(yùn)行結(jié)果在文章末尾):

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 導(dǎo)入 requests 模塊,lxml etree
import requests
from lxml import etree

# 我們先獲取國內(nèi)電影頁面的第一頁。
# 將標(biāo)簽「國內(nèi)電影」的第一頁的 URL 粘貼在' '中,并賦值給變量url
url = 'http://www.ygdy8.com/html/gndy/china/list_4_1.html'
res = requests.get(url)
# # 在網(wǎng)頁的源碼搜索 charset 可以發(fā)現(xiàn)網(wǎng)頁編碼為 gb2312,省略這一步會(huì)出現(xiàn)亂碼的情況
res.encoding = 'gb2312'
# 如果打印源碼的時(shí)候出現(xiàn)報(bào)錯(cuò),可以把 text 轉(zhuǎn)換為 content,這一步是需要調(diào)試的
html = res.text
# 測試:print(html)
selector = etree.HTML(html)
# 因?yàn)樵?table 標(biāo)簽下,所以:
infos = selector.xpath('//table[@class="tbspan"]//a[@class="ulink"]')
# 測試:print(len(infos))


# 循環(huán),打印
# 第一次打印的結(jié)果發(fā)現(xiàn)運(yùn)行結(jié)果是列表,所以第二次打印時(shí)在列表后面附上[0]
# 第二次打印發(fā)現(xiàn):
# movie_url 的值是 /html/gndy/dyzz/20170806/54699.html,
# 看起來并不是一個(gè)完整的 URL,可以進(jìn)入電影名頁面看看
# 電影名頁面URL:
# http://www.ygdy8.com/html/gndy/dyzz/20170806/54699.html
# 所以在movie_url值里加上了 'http://www.ygdy8.com' + ,
for info in infos:
    movie_url = 'http://www.ygdy8.com' + info.xpath('@href')[0]
    movie_name = info.xpath('text()')[0]
    # print(movie_url, movie_name)

    new_url = movie_url
    new_res = requests.get(new_url)
    new_res.encoding = 'gb2312'
    new_html = new_res.text
    new_selector = etree.HTML(new_html)
    new_infos = new_selector.xpath('//td[@style="WORD-WRAP: break-word"]/a')
    
    
    for new_info in new_infos:
        new_movie_url = new_info.xpath('@href')[0]
        new_movie_name = new_info.xpath('text()')[0]
        print(movie_url, movie_name, new_movie_url, new_movie_name)

上面的代碼成功獲取國內(nèi)電影頁面第一頁的所有電影名稱和下載鏈接,接下來我們將函數(shù)封裝,修改獲取范圍為第一頁至第七頁的源代碼,再打印一次。

三、函數(shù)封裝


第二次打印(運(yùn)行結(jié)果在文章末尾):

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
from lxml import etree

# 封裝函數(shù)的寫法

def get_movie_url(url):
    res = requests.get(url)
    res.encoding = 'gb2312'
    html = res.text
    selector = etree.HTML(html)
    infos = selector.xpath('//table[@class="tbspan"]//a[@class="ulink"]')
    for info in infos:
        movie_url = 'http://www.ygdy8.com' + info.xpath('@href')[0]
        movie_name = info.xpath('text()')[0]
        get_movie_soure(movie_url, movie_name)

def get_movie_soure(movie_url, movie_name):
    new_url = movie_url
    new_res = requests.get(new_url)
    new_res.encoding = 'gb2312'
    new_html = new_res.text
    new_selector = etree.HTML(new_html)
    new_infos = new_selector.xpath('//td[@style="WORD-WRAP: break-word"]/a')
    for new_info in new_infos:
        new_movie_url = new_info.xpath('@href')[0]
        new_movie_name = new_info.xpath('text()')[0]
        print('電影名稱:%r,下載鏈接:%r' % (movie_name, new_movie_url))

if __name__ == '__main__':
    base_url = 'http://www.ygdy8.com/html/gndy/china/list_4_%s.html'

    for page in range(1, 8):
        url = base_url %str(page)
        print('第%d頁' % page, '頁面鏈接:', url)
        get_movie_url(url)

四、運(yùn)行結(jié)果


第一次運(yùn)行結(jié)果

第二次運(yùn)行結(jié)果

最后編輯于
?著作權(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)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,293評(píng)論 4 61
  • I was so excited that I couldn’t say a word. 5. so that.....
    小綠植物閱讀 912評(píng)論 0 0
  • (作者:般若多光) 云做的鏡子里住著眾生 深處是我前世的翅膀 和隔世的菩提 今生我是它的路人 打馬經(jīng)過 羊皮水袋盛...
    炑焚燊大祭司閱讀 706評(píng)論 37 5

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