今日内容:
爬虫课程:
一 爬虫基本原理
二 requests请求库
一 爬虫基本原理
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、响应状态码


一、​访问校花网
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('视频下载完毕')
# main + 回车键
# 测试用例
if __name__ == '__main__':
    for line in range(6):
        url=f'http://www.xiaohuar.com/list-3-{line}.html'
        #发送请求
        response = requests.get(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_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)

 二、访问github

''''''
'''
POST请求自动登录github
    请求URL:
        https://github.com/session
    请求方式:
        POST
    请求头
        Cookie
        User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
    请求体
    commit:Sign in
    utf8:✓
    authenticity_token:cFSDQ5zTaUkkx13xtncPeJhxAnqGiKPoWzKBuTvFyapNXsVlD6MIR/7IBtaIjEOT3yOPiYYXCxAEkZwsnjTO4g==
    login:******
    password:****
    webauthn-support:unknown
'''
# 1.获取token随机字符串
'''
1.访问登录页面获取token字符串
    请求URL:
            https://github.com/session
    请求方式:
            GET
    请求头
            Cookie
            User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 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 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 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页面的cooies信息
# print(type(login_res.cookies))
# print(type(login_res.cookies.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 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
    请求体
        commit:Sign in
        utf8:✓
        authenticity_token:cFSDQ5zTaUkkx13xtncPeJhxAnqGiKPoWzKBuTvFyapNXsVlD6MIR/7IBtaIjEOT3yOPiYYXCxAEkZwsnjTO4g==
        login:******
        password:**********
        webauthn-support:unknown
'''
# session登录url
session_url ='https://github.com/session'
# 请求头信息
session_headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
}
# 请求体信息
form_data ={
'commit':'Sign in',
    'utf8':'',
    'authenticity_token':authenticity_token,
    'login':'********',
    'password':'********',
    'webauthn-support':'unknown',
}
session_res = requests.post(url=session_url,
              headers=session_headers,
              cookies=login_cookies,
              data=form_data)
with open('github3.html','w',encoding='utf-8') as f:
    f.write(session_res.text)

 

posted on 2019-07-01 14:52  0流年无恙0  阅读(108)  评论(0编辑  收藏  举报