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)

 

posted @ 2019-03-11 22:56  Milford  阅读(1371)  评论(0编辑  收藏  举报