zoukankan      html  css  js  c++  java
  • DAY 87 爬虫01

    1 支付接口
    -校验金额
       -生成id号
       -获取user对象
       -生成支付链接
       -入库前准备
       -保存数据
       
    2 支付回调get回调,调前端
    -查询一下这个订单是否支付成功
    3 支付宝post回调
    -验证签名(sdk提供了)
       -修改订单状态
       -给支付宝回复succes
    4 买了一个云服务器
    -公有云,私有云(公司内部云服务器)
       -虚拟化,kvm,vmware...
       -openstack:python写的,管理虚拟机的,阿里飞天
       -docker,k8s
       
       
    5 装mysql,装redis,装python3.6,装nginx,建立虚拟环境
    6 部署前后端项目
    -前端:build---》传上去---》nginx代理
       -后端
      -uwsgi运行django,可以跑在多个端口上
      -uwsgi配置+wsgi.py(配置文件)
           -nginx转发动态请求到uwsgi(转发uwsgi协议)
           -有前后端混合的代码收集静态文件
          -动静分离
               -nginx转发

     

    1 爬虫基本原理

    1 爬虫流程
    -(Request,selenium)使用请求库请求数据(http请求),网页,app--》很多反扒
       -(bs4,lxml)html格式解析,json格式---》数据清洗   ----》有反扒
       -入库(mysql,redis,mongodb,文件,excel)
       
    2 可见即可爬
    3 爬虫协议:https://www.cnblogs.com/robots.txt
       
    4 百度,谷歌,搜索引起都是爬虫
    -百度一刻不停的取互联网上爬取页面----》存到自己库中
       -使用百度搜索---》百度库中搜(全文检索es,分词,打分)---》返回
       -百度快照(百度爬取那一刻的数据),点击标题---》去了原链接

     

    2 requests模块介绍

    1 模拟发送http请求的模块---》不仅仅用来做爬虫,服务之间的调用也使用它
    2 http请求请求头,请求体,请求地址都可以使用这个模块
    3 requests是基于python urllib2模块封装的,这个模块用起来比较繁琐
    4 安装:pip3 install requests

     

    3 requests模块发送get请求




    import requests
    # 1 发送get请求
    # res是响应对象,http响应封装了,响应体
    # res=requests.get('https://www.cnblogs.com/xiaoyuanqujing/p/11805679.html')
    # # 把响应体的数据转成了字符串
    # print(res.text)


    # 2 向百度发送请求
    # res=requests.get('https://www.baidu.com/')
    # # print(res.text)
    # with open('baidu.html','wb') as f:
    #     f.write(res.content) # 响应体二进制内容


    # 3 请求地址中携带数据
    # 拼在路径中
    # 没有带请求头:客户端类型
    # 如果你发送请求去一个地址,拿的数据不对的原因是什么?你模拟的不像浏览器,把请求头的数据该带的带上
    # user-agent,referer
    # header={
    #     'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
    # }
    # # res=requests.get('https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3',headers=header)
    # # 使用params来传递get请求参数
    # res=requests.get('https://www.baidu.com/s',params={'wd':'帅哥'},headers=header)
    # # print(res.text)
    # with open('baidu.html','wb') as f:
    #     f.write(res.content) # 响应体二进制内容


    # 4 请求头的使用
    '''
    user-agent,
    referer
    Cookie:未认证的cookie,认证过的cookie

    '''
    # 5 中文转码和编码
    # from urllib.parse import urlencode,unquote

    # 把中文转成%的形式
    # params={'wd':'帅哥'}
    # res=urlencode(params)
    # print(res)
    #
    # # 把%形式转成中文
    # res2=unquote(res)
    # print(res2)


    # 6 cookie的使用,正常是在请求头中
    # cookie经常用,作者把cookies当作一个参数使用
    # header={
    #     'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
    #
    # }
    # # Dict or CookieJar:是一个对象,登录成功以后拿cookie得到的就是一个cookieJar对象
    # res=requests.get('https://www.baidu.com/s',params={'wd':'帅哥'},headers=header,cookies={''})
    # # print(res.text)
    # with open('baidu.html','wb') as f:
    #     f.write(res.content) # 响应体二进制内容


     

    4 requests模块发送post请求

    # 1  模拟登录某网站

    # import requests
    #
    # data = {
    #     'username': '616564099@qq.com',
    #     'password': 'lqz123',
    #     'captcha': '9eee',
    #     'ref': 'http://www.aa7a.cn/',
    #     'act': 'act_login',
    # }
    # res = requests.post('http://www.aa7a.cn/user.php', data=data)
    # print(res.text)
    # # {"error":0,"ref":"http://www.aa7a.cn/"} 登录成功
    # # 取到cookie--》登录成功的cookie
    #
    # # CookieJar 对象
    # print(res.cookies.get_dict())
    #
    # res1 = requests.get('http://www.aa7a.cn/', cookies=res.cookies.get_dict())
    #
    # print('616564099@qq.com' in res1.text)



    # 2 如何携带data数据,如何携带cookies:CookieJar或者字典




    # 3 requests.session()
    # import requests
    # # 拿到一个session对象,发送请求时,跟使用reqesuts一样,只不过它自动处理了cookie
    # session=requests.session()
    # data = {
    #     'username': '616564099@qq.com',
    #     'password': 'lqz123',
    #     'captcha': '9eee',
    #     'ref': 'http://www.aa7a.cn/',
    #     'act': 'act_login',
    # }
    # res = session.post('http://www.aa7a.cn/user.php', data=data)
    # # print(res.text)
    # # {"error":0,"ref":"http://www.aa7a.cn/"} 登录成功
    # # 取到cookie--》登录成功的cookie
    #
    # # CookieJar 对象
    # # print(res.cookies.get_dict())
    #
    # res1 = session.get('http://www.aa7a.cn/')
    #
    # print('616564099@qq.com' in res1.text)


    ## 携带json格式数据(自己回去尝试)
    # import requests
    # requests.post(url='',
    #               json={'':1,},
    #               ) #默认的请求头:application/json

     

    5 requests模块响应对象



    # 1 响应对象
    # import requests
    # respone=requests.get('http://www.jianshu.com')
    # # respone属性
    # print(respone.text)   # 把body体中数据转成字符串格式
    # print(respone.content) # body体中的二进制格式
    #
    # print(respone.status_code) # 响应状态码
    # print(respone.headers)     # 响应头
    # print(respone.cookies)     # 响应的cookie,如果登录了,这个cookie就是登录的cookie
    # print(respone.cookies.get_dict()) # cookiejar对象---》字典对象
    # print(respone.cookies.items())   # 跟字典一样
    #
    # print(respone.url)             # 请求的地址
    # print(respone.history)         # 列表,访问一个网址,重定向了,列表中放这两个地址
    #
    # print(respone.encoding)       # 响应的编码格式(一般都是utf-8)



    # 如果是图片,视频,保存到本地
    # response.iter_content(): 可以循环它,而不是循环response.content,循环它一点点存
    # res=requests.get('xxx')
    # for line in res.iter_content():
    #     f.write(line)



    #2 编码问题(一般不存在,如果存在)
    # response.encoding='gb2312' # 改成网站编码方式即可
    # import requests
    # response=requests.get('http://www.autohome.com/news')
    # response.encoding='gbk' #汽车之家网站返回的页面内容为gb2312编码的,而requests的默认编码为ISO-8859-1,如果不设置成gbk则中文乱码
    # print(response.text)


    # 3 获取二进制内容
    # import requests
    #
    # response=requests.get('https://wx4.sinaimg.cn/mw690/005Po8PKgy1gqmatpdmhij309j070dgj.jpg')
    #
    # with open('a.jpg','wb') as f:
    #     # f.write(response.content)
    #     # 推荐用这个
    #     for line in response.iter_content():
    #         f.write(line)


    # 4 json格式解码
    # import requests
    # # import json
    # res=requests.get('https://api.luffycity.com/api/v1/course/actual/?category_id=1')
    # # print(json.loads(res.text))
    # print(res.json()['code'])

     

    6 爬取视频

    # 分析出爬取的地址是
    https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=9&start=0
    import requests
    import re

    res = requests.get('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=9&start=0')
    # print(res.text)

    video_ids = re.findall('<a href="(.*?)" class="vervideo-lilink actplay">', res.text)
    # print(video_ids)
    for video_id in video_ids:
       video_url = 'https://www.pearvideo.com/' + video_id
       # print(video_url)
       real_video_id = video_id.split('_')[-1]
       # print(real_video_id)
       # print(video_url)
       # res_detail=video_detail=requests.get(video_url)
       # print(res_detail.text)
       # break
       # 直接发送ajax请求,拿到json格式数据--》json格式数据中就有mp4
       header = {
           'Referer': video_url
      }
       res_json = requests.get('https://www.pearvideo.com/videoStatus.jsp?contId=%s' % real_video_id, headers=header)
       # print(res_json.json())
       mp4_url = res_json.json()['videoInfo']['videos']['srcUrl']
       mp4_url = mp4_url.replace(mp4_url.split('/')[-1].split('-')[0], 'cont-%s' % real_video_id)

       print(mp4_url)
       video_res = requests.get(mp4_url)
       name=mp4_url.split('/')[-1]
       with open('video/%s'%name, 'wb') as f:
           for line in video_res.iter_content():
               f.write(line)

    # https://video.pearvideo.com/mp4/third/20210509/ cont-1728918 -15454898-094108-hd.mp4 能播放
    # https://video.pearvideo.com/mp4/third/20210509/ 1621312234758 -15454898-094108-hd.mp4


    # 线程池爬取视频
    https://blog.csdn.net/qq_17273727/article/details/111026372

     

    7 自动登录某网站

    import requests
    # 拿到一个session对象,发送请求时,跟使用reqesuts一样,只不过它自动处理了cookie
    session=requests.session()
    data = {
       'username': '616564099@qq.com',
       'password': 'lqz123',
       'captcha': '9eee',
       'ref': 'http://www.aa7a.cn/',
       'act': 'act_login',
    }
    res = session.post('http://www.aa7a.cn/user.php', data=data)
    # print(res.text)
    # {"error":0,"ref":"http://www.aa7a.cn/"} 登录成功
    # 取到cookie--》登录成功的cookie

    # CookieJar 对象
    # print(res.cookies.get_dict())

    res1 = session.get('http://www.aa7a.cn/')

    print('616564099@qq.com' in res1.text)
  • 相关阅读:
    Seafile V4.1 安装笔记
    mysql int(3)与int(11)的区别
    python命令行参数处理模块 optparse 使用参考
    Python标准库 urllib2 的使用
    Python默认模块 os和shutil 实用函数
    ApacheBench 使用教程
    ThinkPHP中PATHINFO模式优化
    Perl中的特殊内置变量详解
    Perl内置变量速查表
    eclipse jetty debug
  • 原文地址:https://www.cnblogs.com/DEJAVU888/p/14894034.html
Copyright © 2011-2022 走看看