zoukankan      html  css  js  c++  java
  • 路飞学城-python爬虫密训-第二章

    (一)学习心得

     第二章的python爬虫密训,又有新的模块Flask,time,re(正则表达式);这次是一步步去爬取web微信的相关信息,怎么讲,也许自己没有前期网页开发相关学习,学习有点难度,希望自己在这短暂7天学习中,先学会掌握爬虫思路,基础知识只能课下好好恶补,因为爬虫不是你想爬就能爬。它需要综合性计算机知识。

     (二)知识点总结

              Web微信示例

    基于Flask开发Web微信

    1. 基于Flask编写登录页面:显示二维码

    From  flask import Flask,request,render_template

    Import  time

    Import re

    App=flask(_name_)

    App.debug=True

    @app.route(“/login”,methods=[“GET”,”POST”])

    Def  login():

         If request.method==”GET”:

           ctime=str((int(time.time()*1000)

           qcode_url=” https://login.wx.qq.com......&fun=new&lang=zh_CN&_={0}.format(ctime)”

    ret=requests.get(qcode_url)

    print(ret.text)

    qcode =re.findall(“uuid=”(.*)”:”,ret.text)[0]

    print(qcode)

           return  render_template(“login.html”)

        else:

           pass

    if _name_==”__main__”:

      app.run()

        学会:

                       a. 去上部请求中查找想要的内容

                       b. chrome,network

                       c. requests

    2. 二维码变

             检查用户是否已经扫码、登录:(将请求夯住)       https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=QbeUOBatKw==&tip=0&r=-1036255891&_=1525749595604      

             扫码:   - 显示头像

             登录:  - 获取凭证信息

         <error>

                              <ret>0</ret>

                           <message></message>

                             <skey>@crypt_2ccf8ab9_70b4bfadb5aeb520357d4ecf46c23713</skey>

                               <wxsid>xryEESU5QgXX61ji</wxsid>

                              <wxuin>981579400</wxuin>

                                 <pass_ticket>3nIORdKsOyenOh1%2FoH4U17Qhw8YBkGHJl%2BfqVvaoGoDnmBoQxEJdA%2BZyuHixW1Ow</pass_ticket>

                                   <isgrayscale>1</isgrayscale>

                                </error>

                                {

                                         'ret': '0',

                                          'message': '',

                                         'skey': '@crypt_2ccf8ab9_3e9a7a5405ef2aef30811783fe0dc14e',

                                         'wxsid': 'R/KWc/xr3zkb0ain',

                                         'wxuin': '981579400',

                                         'pass_ticket': 'er8kY4ydtTlfttnRyYNsl%2FXsopxPV6o06LNQRlWAqN0CfhkHX2VE0wDb8u8Vo9hr',

                                         'isgrayscale': '1'

                                }

    3. 用户初始化

             发送POST请求:

                       https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=-1039465096&lang=zh_CN&pass_ticket=q9TOX4RI4VmNiHXW9dUUl1oMzoQK2X2f3H3kn0VYm5YGNwUMO2THYMznv8DSXqp0

                       data = {

                                "BaseRequest":{

                                         "DeviceID":"e750865687999321"

                                         Sid:"/xhn2u7d5BL7s+xP"

                                         Skey:"@crypt_2ccf8ab9_10519e7b5c402ccdeb2c3f100ea3a521"

                                         Uin:"981579400"

                                }

                       }

    4. 获取联系人列表

             getContactList

    总结  1. url  2. 响应   3. cookie 4. chrome

             PS:

                       轮训

                       长轮训

                       Websocket

    5.高性能相关

    任务:批量发送请求

    方案:

         -买电脑

         -写程序

         -开线程

         -单线程

    本质:-浏览器本质,socket客户端遵循http协议(通过 分割的规范+请求响应断开连接=》无状态、短链接)

    url=“www.cnblongs.com ”

    sk=socket.socket()

    #连接的过程是:阻塞

    sk.connect((url,80))

    #http协议

    content=“ ......  ”%url

    sk.sendall(content.encode(“utf-8 ”))

    #等待服务端返回内容:阻塞

    data=sk.recv(8096)

    print(data)

    sk.close()

    6.IO多路复用

    目标:用于监听多个socket对象是否发生变化。

    import  select(需要记下来哦!)

    while True:

    #让select模块帮助我们去检测sk1/sk2两个socket对象是否已经发生“变化”

    r=[]

    如果r中有值

    r=[sk1,] 表示:sk1这个socket已经获取到响应的内容

    r=[sk1,sk2]  表示:sk1,sk2这两个socket已经获取到响应的内容

    w=[],如果w中有值

    w=[sk1,] 表示:sk1这个socket已经连接成功

    w=[sk1,sk2]  表示:sk1,sk2这两个socket已经连接成功

    r,w,e=select.select([sk1,sk2],[sk1,sk2],[],0.5)

  • 相关阅读:
    Web性能压力测试工具之WebBench详解
    Request Header Or Cookie Too Large
    手动删除SVCH0ST.EXE的方法
    微信非80端口网页授权
    微信公众号开发80端口映射解决方案 推荐
    解决微信访问 80 端口的限制问题
    Windows查看所有的端口及端口对应的程序
    Windows环境下,用netstat命令查看某个端口号是否占用
    价值观--我的总结
    价值是事物由人(基于自己的需要和获取的难度而)作出的评价而存在的属性
  • 原文地址:https://www.cnblogs.com/christyyao/p/9283561.html
Copyright © 2011-2022 走看看