路飞学城-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协议(通过\r\n分割的规范+请求响应断开连接=》无状态、短链接)

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)

 

posted @ 2018-07-09 15:02  christy耀  阅读(192)  评论(0编辑  收藏  举报