Day01课堂笔记

一 爬虫基本原理

1、 什么是爬虫?

爬虫就是爬取数据

2、 什么是互联网?

  有一堆网络设备,将一台台的计算机互联到一起,称之为互联网

3、 互联网建立的目的

  数据的传递和数据的共享

4、 什么是数据?

  例如:

       电商平台的商品信息(淘宝、东京、亚马逊)

       链家、自如租房的房源信息

       股票证券投资信息(东方财富、雪球网)

。。。

      12306,票务信息(抢票)

5、 什么是上网?

   普通用户:

           打开浏览器---->输入网址---->往目标主机发送请求---->返回相应数据--->把数据渲染到浏览器中

   爬虫程序:

           模拟浏览器

           ---->往目标主机发送请求

           ---->返回响应数据

           ---->解析并提取有价值的数据

           ---->数据保存(文件写入本地、持久化到数据库中)

6、 爬虫的全过程

1、 发送请求(请求库:Requests/Selenium)

2、 获取响应数据

3、 解析数据(解析库:BeautifulSoup4)

4、 保存数据(存储库:文件保存/MongoDB)

总结:我们可以把互联网中的数据比喻成一座宝库,爬虫其实就是在挖去宝藏。

二 requests请求库

1、 安装与使用

   pip3 install requests

2、 分析请求流程(模拟浏览器)

   百度:

1、 请求URL

2、 请求方式:GET

3、 响应状态码


'''
爬取校花网视频:
         一、请求URL
             http://www.xiaohuar.com/v/
         二、请求方式
             GET
         三、请求头信息
             User-Agent--用户代理
'''

import requests
#爬虫三部曲
#1.发送请求
import time
def get_page(url):
    response=requests.get(url)
    return response
#2.解析数据
import re
def parse_index(html):
    #findall匹配所有
    # re.findall(‘正则匹配规则’,‘匹配文本’,‘匹配模式’)
    #re.S:对全部文本进行搜索匹配
    detail_urls=re.findall('div class="items"><a class="imglink" href="(.*?)"', html, re.S)
    # for detail_url in detail_urls:
        # print(detail_url)
    return detail_urls
#解析详情页
def parse_detail(html):
    movie_url=re.findall('<source src="(.*?)"',html,re.S)
    # print(movie_rul)
    if movie_url:
        return  movie_url[0]
#3.保存数据
import uuid
#uuid.uuid4()根据时间戳生成一段世界上唯一的字符串
def save_video(content):
    with open(f'{uuid.uuid4()}.mp4','wb') as f:
        f.write(content)
    print('视频下载完毕')
#main+回车键
#测试用例
if __name__ == '__main__':
    for line in range(6):
        url=f'http://www.xiaohuar.com/list-3-{line}.html'
    #发送请求
        response = get_page(url)
    #print(response)
    #返回响应状态码
    # print(response.status_code)
    #返回响应文本
    # print(response.text)
    #解析主页页面
        detail_urls=parse_index(response.text)
    #循环遍历详情页url
        for detail_url in detail_urls:
            # print(detail_url)
            # 往每一个详情页发送请求
            detail_res = get_page(detail_url)
            # print(response.text)

            # 解析详情页获取视频url
            movie_url = parse_detail(detail_res.text)

            # 判断url存在打印视频
            if movie_url:
                print(movie_url)

                # 往视频url发送请求获取视频二进制流
                movie_res = get_page(movie_url)
                # 把视频的二进制流给save_video函数去保存到本地
                save_video(movie_res.content)

 

posted @ 2019-07-01 15:23  上天的98k消音  阅读(109)  评论(0编辑  收藏  举报