路飞学城-爬虫集训营-第二章
学习心得
1.本章学习的是以实战为主,新知识点在Flask上,其他的知识点都在第一章上
Flask中文文档:http://www.pythondoc.com/flask-mega-tutorial/
2.初学者没学过框架在Flask大概会踩很多坑需要自己网上找很多东西
3.学习新东西的时候一定要有耐心不要放弃,遇到问题多用搜索引擎和论坛找答案。不要找到一个答案就不找了多找点案例能多帮助记忆
4.在学习上遇到了很多问题比如说wx.qq.com和wx2.qq.com不同用户是不同得,程序需要更加人性化得去分析。
5.在直播课上老师说的规范都是一些我们没工作经验的人需要的。对于web框架我们需要的是耐心去练习,多写,多想,多查才能熟悉的应用毕竟爬虫离不开web开发,框架是必须要学会的
Web框架---Flask
1.安装
pip3/pip install flask
2.文件结构
project
__init__.py
static #静态
templates #html文件
views.py #视图
run.py #运行
3.简单使用
1.在__init__.py创建初始化脚本
from flask import Flask
app = Flask(__name__)
from app import views
2.编写视图函数
from app import app
@app.route('/')
@app.route('/index')
def index():
return "Hello, World!"
3.执行脚本
from app import app
app.run()
4.运行
python3 ./run.py
4.使用模板
from flask import render_template
@app.route('/login')
def login():
qcode = '给模板的数据'
return render_template('login.html', qcode=qcode)
5.管理会话 --- session
session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:‘xxxxxx’}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证;
@app.route('/check/login') def check_login(): check_login_url = 'https://login.wx2.qq.com/cgi-bin/mmwebwx-bin/login' check_login_params = { 'loginicon': 'true', 'uuid': session['qrcode'], 'tip': 0, 'r': '-2034746127', # 时间戳取反 '_': int(time.time() * 1000) } response = requests.get(url=check_login_url, params=check_login_params) result = {'code': 408} if 'window.code=408' in response.text: # 用户没扫码 result['code'] = 408 elif 'window.code=201' in response.text: result['code'] = 201 # 用户扫码了,获取头像 result['avatar'] = re.findall("window.userAvatar = '(.*?)';", response.text)[0] elif 'window.code=200' in response.text: redirect_uri = re.findall('window.redirect_uri="(.*?)";', response.text)[0] redirect_uri = redirect_uri + '&fun=new&version=2' if 'wx2.qq.com' in redirect_uri:#有些微信需要wx2才能正常使用,判断返回URi是否wx2为后续准备 session['host'] = 'wx2.qq.com' else: session['host'] = 'wx.qq.com' ret = requests.get(redirect_uri) ticket_dict = xml_parse(ret.text) session['ticket_dict'] = ticket_dict session['ticket_cookies'] = ret.cookies.get_dict() result['code'] = 200 return jsonify(result)
6.注意点
1.注意不要用全局变量存cookie等重要信息要使用session
2.重复的东西可以放进session或者g里
基于Flask编写web微信
1.。。。。
1.微信ID不唯一每次登陆后会改变,所以登陆后需要再次获取ID
2.接收消息如果图片消息会无法接收,可分析接收到的json获取图片
3.微信消息近乎是实时,所以需要开个线程或者进程来循环获取
2.思路
1.通过分析wx.qq.com网页获取到二维码地址 显示在自己的前端
2.添加长轮询检测用户是否成功扫描二维码
3.检测用户是否点击登陆
4.登陆后为了后续需要的 把初始化数据和cookie放入session
5.根据API达到各种功能,比如 获取联系人,微信公众号,发送消息,接收消息,获取用户头像
3.实例
https://github.com/amongtheflowers/WebWX