python爬虫Day 01

一 、爬虫基本原理

    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/

            2.请求方式
                GET
                POST

            3.响应状态码

            4.请求头信息

我们爬虫要用到的requests请求库:

安装:

1
pip3 install requests

 每次使用的时候在代码前面加上

import requests
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)
    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)
        # 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)

三、post请求自动登入github

"""
请求URL:https://github.com/login

请求头:
    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

请求体:
Form Data:
    commit: Sign in
    utf8: ✓
    authenticity_token: mOyooOxE7c/H7krQKEli+cwwy0+okuPOZqGEBSyu/kRfLHT2mNGu9RQcDnb1ovua1zQe3LOyYXxrWxFL+2aAcg==
    login: gr6g5r
    password: huhuhhge
    webauthn-support: supported
"""
import requests
import re
login_url = 'https://github.com/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)


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

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

# 请求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": "*******",
    "password": "*******",
    "webauthn-support": "supported"
}

session_res = requests.post(
    url=session_url,
    headers=session_headers,
    cookies=login_cookies,
    data=form_data
)

with open('github.html', 'w', encoding='utf-8') as f:
    f.write(session_res.text)

猜你喜欢

转载自www.cnblogs.com/zyl0517/p/11116591.html