python爬蟲基礎應用----爬取無反爬視頻網站


一.爬蟲簡單介紹

  爬蟲是什么?

  爬蟲是首先使用模擬瀏覽器訪問網站獲取數據,然后通過解析過濾獲得有價值的信息,最后保存到到自己庫中的程序.

  爬蟲程序包括哪些模塊?

  python中的爬蟲程序主要包括,requests請求庫,seleium請求庫,xpath和BeautSoup4解析庫,

  爬取校花網需要使用到哪些模塊?

  校花網結構簡單,而且沒有任何防爬手段,所在只需要使用requests就可以完成了=.=.

二.具體操作

  1.獲得網頁

  網站地址:http://www.xiaohuar.com/

  我要爬取的視頻網頁主頁為http://www.xiaohuar.com/list-3-0.html

  下一頁為http://www.xiaohuar.com/list-3-1.html

  總共有五頁所以,拼接生成五頁主頁.

url = 'http://www.xiaohuar.com/list-3-{}.html'
for line in range(5):
    index_url = url.format(line)

  2.主頁解析

  主頁中跳轉到詳情頁的連接在這里

#使用正則可以獲得詳情頁網址.

re.findall('<div class="items".*?<a href="(.*?)"',index_res,re.S)

 


  3.詳情頁解析

  詳情頁中的視頻連接在這個位置 

  

#正則匹配獲得視頻的網址
video_url = re.findall('<source src="(.*?)">',detail_page,re.S) 

# 順便獲得視頻的名字
video_name = re.findall('<h1>(.*?)</h1>',detail_page,re.S)

 

  4.保存視頻

  將上獲得的網址與視頻名傳入函數,打開網址將內容保存到video中 "視頻名字".mp4的文件中,

def save_video(video_dic):
    try:
        video_url=video_dic.get('url')
        video_name=video_dic.get('name')
        video = requests.get(video_url)
        with open(r'video/%s.mp4'%video_name,'wb') as f:
            f.write(video.content)
            f.flush()
    except Exception:
        pass

 

  5.全部執行代碼

import requests
import re
import uuid

#一.獲取網頁

url='http://www.xiaohuar.com/'

def get_page(url):
    index_res = requests.get(url)
    return index_res.text

#二.解析網站
# 解析主頁
def parse_index(index_res):
    detail_url_list = re.findall('<div class="items".*?<a href="(.*?)"',index_res,re.S)
    return detail_url_list

#解析詳情頁
def parse_detail(detail_page):
    video_url = re.findall('<source src="(.*?)">',detail_page,re.S)
    video_name = re.findall('<h1>(.*?)</h1>',detail_page,re.S)
    print(video_url)
    print(video_name)
    if video_url:
        video_url=video_url[0]
        if video_name:
            video_name=video_name[0]
            return {'url': video_url, 'name': video_name}
        else:
            video_name=uuid.uuid4()
            return {'url':video_url,'name':video_name}

#三.保存視頻
def save_video(video_dic):
    try:
        video_url=video_dic.get('url')
        video_name=video_dic.get('name')
        video = requests.get(video_url)
        with open(r'video/%s.mp4'%video_name,'wb') as f:
            f.write(video.content)
            f.flush()
    except Exception:
        pass

if __name__=='__main__':
    url = 'http://www.xiaohuar.com/list-3-{}.html'
    for line in range(5):
        index_url = url.format(line)
        print(index_url)
        # 獲得主頁文本
        index_res = get_page(index_url)
        # 解析主頁,獲得詳情頁網址列表
        detail_url_list = parse_index(index_res)
        print(detail_url_list)
        for detail_url in detail_url_list:
            detail_page = get_page(detail_url)
            video_dic=parse_detail(detail_page)
            save_video(video_dic)

 


免責聲明!

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



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