day01(跳过github登录、requests请求库)

什么是爬虫?

    爬虫就是爬取数据

什么是数据?

    电商平台的商品信息、12306票务信息、股票证券投资信息等

requests请求库的安装

   在cmd窗口中输入python,然后输入 pip3 install requests

在检查网页的Network的Headers中各个标识的涵义
Request URL:https://www.baidu.com/      (请求url)
Request Method:GET                               (请求方式)
Status Code:200 OK                                 (响应状态码)
Response Headers                                   (提交到服务器的数据头)
Cookie                                                       (用户信息)
User-Agent                                                (用户代理)
import time
import requests
import  re
# 发送请求
def get_page(url):
    response = requests.get(url)
    return response
# 解析数据
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]
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:
            # 往每一个详情页发送请求
            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)

  

2.Github

2.1  只有POST请求才会有请求体

2.2 在Network-->login--->Response-->Ctrl+F   然后就可以在下列搜索框中输入要查找的东西

2.3请求体:

第一步:解析并提取token字符串

import  requests
import  re
login_url='https://github.com/login'
# login页面的请求头信息
login_header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 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 = login_res.cookies.get_dict()

实验结果:

第二步:登录

session_url = 'https://github.com/session'
session_headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 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('github1.html','w',encoding='utf-8') as f:
    f.write(session_res.text)

实验结果:

posted @ 2019-07-01 20:42  rant  阅读(248)  评论(0编辑  收藏  举报