zoukankan      html  css  js  c++  java
  • Day 01

    今日内容:
    爬虫课程:
    一 爬虫基本原理
    二 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

    3.响应状态码

    测试用例:
    01❤爬取视频
     1 """
     2 爬取校花网视频:
     3     一 请求url
     4         https://www.xiaohuar.com/v/
     5     二 请求方式
     6         GET
     7     三 请求头信息
     8         User-Agent:用户代理
     9 """
    10 import time
    11 import requests
    12 # 爬虫三部曲
    13 # 1.发送请求
    14 def get_page(url):
    15     response = requests.get(url)
    16     return response
    17 
    18 # 2.解析数据
    19 import re
    20 def parse_index(html):
    21     # findall匹配所有
    22     # re.findall("正则匹配规则","匹配文本","匹配模式")
    23     # re.S:对全部文本运行搜索匹配
    24     detail_urls = re.findall(
    25         '<div class="items"><a class="imglink" href="(.*?)" ',html,re.S)
    26     # for detail_url in detail_urls:
    27     #     print(detail_url)
    28     return detail_urls
    29 # 解析详情页
    30 def parse_detail(html):
    31     movie_url = re.findall('<source src="(.*?)">',html,re.S)
    32     # print(movie_url)
    33     if movie_url:
    34         return movie_url[0]
    35 # 3.保存数据
    36 import uuid
    37 #uuid.uuid4()根据时间戳生成一段世界上唯一的字符串
    38 def save_video(content):
    39     with open(f'{uuid.uuid4()}.mp4','wb') as  f:
    40         f.write(content)
    41         print('视频已下载完毕')
    42 # main  +  回车键
    43 # 测试用例
    44 if __name__ == '__main__':
    45     for line in range(6):
    46         url  =  f'http://www.xiaohuar.com/list-3-{line}.html'
    47 
    48         # 发送请求
    49         response = get_page(url)
    50         # print(response)
    51         #返回响应状态码
    52         # print(response.status_code)
    53         # 返回响应文本
    54         # print(response.text)
    55         # 解析主页页面
    56         detail_urls = parse_index(response.text)
    57         # 循环遍历详情页url
    58         for detail_url in detail_urls:
    59             # print(detail_url)
    60             # 往每一个详情页发送请求
    61             detail_res= get_page(detail_url)
    62             # print(response.text)
    63             # 解析详情页获取视频url
    64             movie_url = parse_detail(detail_res.text)
    65             # 判断视频url存在则打印
    66             if movie_url:
    67                 print(movie_url)
    68                 # 往视频url发送请求获取视频二进制流
    69                 movie_res = get_page(movie_url)
    70                 # 把视频的二进制流传给save_video函数去保存到本地
    71                 save_video(movie_res.content)

     02POST请求自动登录

     1 '''
     2 POST请求自动登录github:
     3     请求url:
     4         https://github.com/session
     5     请求方式:
     6         POST
     7     请求头:
     8         Cookie
     9         User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
    10     请求体:
    11         commit: 登入
    12         utf8: ✓
    13         authenticity_token: BmBVp2/GJ9KBl9fNLe17Dl9mrbQEDhqDifKOz1KJ4mgo3+Pv7COy+so2zVc0gZ1hVJP9i1+boDfsQl41mi2AoQ==
    14         login: *******
    15         password:*******
    16         webauthn-support: supported
    17 
    18 '''
    19 # 获取token随机字符串
    20 '''
    21 1.访问登录页面获取token的随机字符串
    22     请求url:
    23         https://github.com/login
    24     请求方式:
    25         GET
    26     请求头:
    27         COOKIES
    28         User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
    29 2.解析并提取token字符串
    30 # 正则
    31 <input type="hidden" name="authenticity_token" value="(.*?)"/>
    32 '''
    33 import requests
    34 import re
    35 login_url = 'https://github.com/login'
    36 # login页面的请求头信息
    37 login_header = {
    38     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
    39 }
    40 login_res = requests.get(url=login_url, headers=login_header)
    41 # print(login_res.text)
    42 
    43 #解析并提取token字符串#
    44 authenticity_token=re.findall(
    45     '<input type="hidden" name="authenticity_token" value="(.*?)" />',login_res.text,re.S)[0]
    46 # print(authenticity_token)
    47 
    48 #获取login页面的cookies信息
    49 # print(type(login_res.cookies))
    50 # print(type(login_res.cookies.get_dict()))
    51 login_cookies = login_res.cookies.get_dict()
    52 
    53 # 开始登录github
    54 '''
    55 POST请求自动登录github:
    56     请求url:
    57         https://github.com/session
    58     请求方式:
    59         POST
    60     请求头:
    61         Cookie
    62         User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
    63     请求体:
    64         commit: 登入
    65         utf8: ✓
    66         authenticity_token: BmBVp2/GJ9KBl9fNLe17Dl9mrbQEDhqDifKOz1KJ4mgo3+Pv7COy+so2zVc0gZ1hVJP9i1+boDfsQl41mi2AoQ==
    67         login: *******
    68         password:*******
    69         webauthn-support: supported
    70 
    71 '''
    72 # session登录url
    73 session_url = 'https://github.com/session'
    74 # 请求头信息
    75 session_headers = {
    76     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
    77 }
    78 # 请求体信息
    79 form_data = {
    80     "commit":"Sign in",
    81     "utf8": "",
    82     "authenticity_token": authenticity_token,
    83     "login":"********",
    84     "password":"*******",
    85     "webauthn-support": "supported"
    86 }
    87 session_res = requests.post(url=session_url,
    88                             headers=session_headers,
    89                             cookies=login_cookies,
    90                             data=form_data)
    91 with open ('github3.html','w',encoding='utf-8') as f:
    92     f.write(session_res.text)
    
    
    


  • 相关阅读:
    Python Web学习笔记之Python多线程基础
    Python入门之python可变对象与不可变对象
    Python Web学习笔记之SOCK_STREAM和SOCK_DGRAM
    background和background-position相关笔记
    自定义switch开关
    获取浏览器类型和版本号
    随机生成字符串
    white-space详解
    文件选择按钮随笔
    mouse的各种事件
  • 原文地址:https://www.cnblogs.com/DLYQY/p/11114011.html
Copyright © 2011-2022 走看看