Python爬虫(Day01)

 

今日内容

爬虫课程:
    一 爬虫基本原理
    二 request请求库

一  爬虫基本原理

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

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

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

    4、什么是数据?
        例如:
            电商平台的商品信息()
            链家、自如租房平台的房源信息
            股票证券投资信息()
            ...
            12306、票务信息(抢票)

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

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

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

    总结:我们可以把互联网中的数据比喻成一座宝藏,爬虫其实就是在挖去宝藏。
二 requests请求库
    1、安装与使用
       pip3 install requests

    2、分析请求流程(模拟浏览器)
       - 百度:
           1.请求url
               www.baidu.com

           2.请求方式
               GET
               POST

例: 爬校花网小视频

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

# 解析详情页
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(f'{uuid.uuid4()}.mp4','wb') as f:
        f.write(content)
        print('视频下载完毕,请观赏。。。')

# 测试用例:
if __name__ == '__main__':
    for line in range(6):
        url = f'http://www.xiaohuar.com/list-3-{line}.html'

        # 发送请求
        response = get_page(url)
        # 解析主页页面
        detail_urls = parse_index(response.text)
        # 循环遍历详情页url
        for detail_url in detail_urls:
           # 往每一个详情页发送请求
            detail_res = get_page(detail_url)
           # 解析详情页获取视频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)

 

例:github自动登录

'''
POST请求自动登录github:
    请求URL:
        https://github.com/session

    请求方式:
        POST

    请求头:
        Cookie
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36

    请求体:
        commit: Sign in
        utf8: ✓
        authenticity_token: eK6P0wQdoWlC7sLJYRe8a4O6XOjyIgicPxSAA1cmv2EIh2e2oGH3lVmzUpi+X4Emvg+MOUnAUEVNnQq6AwfYuQ==
        login: 123
        password: 123
        webauthn-support: supported
'''
# 1、获取token随机字符串
'''
1.访问登录页面获取token随机字符串
    请求URL:
        https://github.com/login
        
    请求方式:
        GET
            
    请求头:
        COOKIES
              User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36  
2.解析并提取token字符串
# 正则
input type="hidden" name="authenticity_token" value="(.*?)" /> 
'''
import requests
import  re
login_url = 'https://github.com/login'
# login页面的请求头信息
login_header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
login_res = requests.get(url=login_url,headers=login_header)
# print(login_res.text)

# 解析提取token字符串
authenticity_token = re.findall('<input type="hidden" name="authenticity_token" value="(.*?)" />',login_res.text,re.S)[0]
print(authenticity_token)

# 获取login页面的cookies信息
# print(type(login_res.cookies))
#print(type(login_res.coolies.get_dict()))
login_cookies = login_res.cookies.get_dict()

# 2、开始登录github
'''
POST请求自动登录github:
    请求URL:
        https://github.com/session

    请求方式:
        POST

    请求头:
        Cookie
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36

    请求体:
        commit: Sign in
        utf8: ✓
        authenticity_token: eK6P0wQdoWlC7sLJYRe8a4O6XOjyIgicPxSAA1cmv2EIh2e2oGH3lVmzUpi+X4Emvg+MOUnAUEVNnQq6AwfYuQ==
        login: Cuteni
        password: 1027kekaini
        webauthn-support: supported       
'''
# session登录url
session_url = 'https://github.com/session'

#请求头信息
session_headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}

#请求体信息
form_data = {
    "commit": "Sign in",
    "utf8": "✓",
    "authenticity_token":authenticity_token,
    "login": "Cuteni",
    "password": "1027kekaini",
    "webauthn-support": "supported"
}
session_res = requests.post(url=session_url,headers=session_headers,cookies=login_cookies,data=form_data)
with open('github1.html','w',encoding='utf-8') as f:
    f.write(session_res.text)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值