Python爬虫 Day 1

2019.7.1
一、爬虫基本原理
1.什么是爬虫
爬取数据
2.什么是互联网
由一堆网络设备,把一台台的计算机互联到一起称之为互联网
3.互联网建立的目的
数据的传递与数据的共享
4.什么是数据
例如:电商平台的商品信息(淘宝、京东、亚马逊)
链家、自如租房平台的房源信息
股票证券投资信息(东方财富)
......
12306,票务信息
5.什么是上网
普通用户:打开浏览器--->输入网址--->往目标主机发送请求--->返回响应数据--->把数据渲染到浏览器中
爬虫程序:模拟浏览器--->往目标主机发送请求--->返回响应数据--->解析并提取有价值的数据--->保存数据(文件写入本地、持久化到数据库中)
6.爬虫的全过程
1.发送请求(请求库:Requests/Seleniun)
2.获取响应数据
3.解析数据(解析库:BeautifulSoup4)
4.保存数据(存储库:文件保存/MongoDB)

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

二.requests请求库
1.安装与使用
pip3 install requests
2.分析请求流程(模拟浏览器)
例如百度
1.请求URL
2.请求方式
GET
POST
3.响应状态码

小例子:爬校花网视频资源
'''
爬取视频
    请求URL
        http://www.xiaohuar.com/v/
    请求方式
        GET
    请求头信息
        User-Agent:用户代理
'''
import time
import requests
# 爬虫三部曲
# 1.发送请求
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 )
      return detail_urls
# for detail_url in detail_urls:
#     print(detail_url)

# 解析详情页
def parse_detail(html):
    movie_url = re.findall('<source src="(.*?)">',html,re.S)
    # print(movie_url)
    if movie_url:
        return  movie_url[0] #只返回视频的详细网址

# 3.保存数据
import uuid
# uuid.uuid4() 根据时间
def save_video(content):
    with open('{}.mp4'.format(uuid.uuid4()),'wb') as f:
        f.write(content)
        print('视频下载完毕')
# main + 回车键
if __name__ == '__main__':
    for line in range(6):
        url = 'http://www.xiaohuar.com/list-3-{}.html'.format(line)
        # 发送请求
        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_response = get_page(detail_url)
            #print(response.text)

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

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

                #往视频url发送请求获取视频二进制流
                movie_response = get_page(movie_url)

                #把视频的二进制流传给save_video函数去保存到本地
                save_video(movie_response.content)


猜你喜欢

转载自www.cnblogs.com/merliah/p/11114091.html