day01 爬虫基本原理

Posted on 2019-07-01 15:02  你家大人  阅读(119)  评论(0)    收藏  举报
今日内容

一、爬虫基本原理

1、什么是爬虫
爬虫就是爬取数据

2、什么是互联网
由一堆网络设备把一台台计算机互联到一起称之为互联网

3、互联网建立的目的
数据的传递与数据的共享

4、什么是数据?
例如:
电商平台的商品信息
股票证券投资信息
...
12306,票务信息

5、什么是上网?
普通用户:
打开浏览器
----->输入网址
----->往目标主机发送请求
----->返回响应数据
----->把数据渲染到浏览器中

爬虫程序:
模拟浏览器
----->往目标主机发送请求
----->返回响应数据
----->解析并提取有价值的数据
----->保存数据(文件写入本地、
持久化到数据库)

6、 爬虫的全过程
1.发送请求(请求库:Requests/Selenium)
2.获取响应
3.解析数据(解析库:BeautifulSoup4)
4.保存数据(存储库:文件保存/MongoDB)

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

二、Requests请求库
1、安装与使用
pip3 install requests

2、分析请求流程
-百度:
1.请求url
https://www.baidu.com
三、分析



四、校花网爬虫三部曲
'''
爬取校花网视频
一、请求url
http://www.xiaohuar.com/v/

二、请求方式
GET

三、请求头信息
User-Agent:用户代理
'''
import time
import requests
import re

 


# 爬虫三部曲
# 1.发送请求
def get_page(url):
    response=requests.get(url)
    return response

 

# 2.解析数据

def parse_index(html):
    # findall匹配所有
    # re.findall('正则匹配规则','匹配文本','匹配模式')
    # re.S:对全部文本进行搜索匹配
    detail_urls=re.findall('<div class="items"><a class="imglink" href="(.*?)"',html,re.S)
     # print(detail_urls)
    return detail_urls
    # 解析详情页
def parse_detail(html):
     movie_url=re.findall('<source src="(.*?)">',html,re.S)
     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'
         # url='http://www.xiaohuar.com/v/'

         # 发送请求
         response=get_page(url)
         # print(response)

         # 返回响应状态码
         # print(response.status_code)
         # 返回响应文本
         # print(response.text)
         # 解析主页页面
         detail_urls=parse_index(response.text)
         for detail_url in detail_urls:
            print(detail_url)
            # response=get_page
            # 往每一个详情页发送请求
            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)