V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
aaronhua
V2EX  ›  Python

讨论型主题:想写一个库,用来本地化 cookies 的,大家给点建议。

  •  1
     
  •   aaronhua · 2019-07-25 10:26:59 +08:00 · 1358 次点击
    这是一个创建于 1708 天前的主题,其中的信息可能已经有所发展或是发生改变。

    面向的系统的特点

    1. 需要长久的爬取,长期的保持登陆
    2. 需要做登陆验证的
    3. 对于登陆时敏感的,对登录次数有限制
    4. 提供兼容多线程的爬虫方式
    5. session 的本地化,极大的方便调试
    6. 对于无需登陆,或者登陆限制小的就不适用这个库。

    我预计的调用示例

    from logincraw import BaseCraw, session
    app = BaseCraw('baiducraw')
    
    @app.login # 系统登陆逻辑,返回 session
    def login():
        session.get('https://www.baidu.com')
        return session # 必须 return session
    
    @app.whether_login # 验证是否登陆成功的方法
    def whether_login(session):
        r = session.get('https://www.baidu.com') # 请求系统的某个页面,用于检测是否登陆
        if r is 'logined':
            return True
        else:
            return False
    
    @app.check_login(thread = 2) # 参数 thread 启动的线程数。与 app.run()搭配
    def start_craw(): # 实际爬虫的逻辑
        print('i am running')
        return save_to_db()
    
    if __name__ == '__main__':
        app.run() # 调用多线程方法
        # or
        # start_craw() # 调用本身的方法
    

    写了个初版的 demo
    https://github.com/aaronhua123/logincraw

    6 条回复    2019-08-16 09:25:33 +08:00
    aaronhua
        1
    aaronhua  
    OP
       2019-07-25 10:42:36 +08:00
    一直在做一些办公系统的爬虫,因为不能频繁登录,所以提取 cookies,保存到 sqlite3 数据库,使用的时候再提取出来。因为对 flask 的调用方式有好感,所以就写成这种调用方式了。(狗头)
    joson1205
        2
    joson1205  
       2019-07-26 09:13:45 +08:00
    难道 cookies 没有时效性的??
    aaronhua
        3
    aaronhua  
    OP
       2019-07-26 09:39:08 +08:00
    @joson1205 需要添加代码去保存 cookies,我之前使用 pickle 去保存 session,但是多线程下调用有问题。我也一直没有想清楚这个问题。会不会有更好的实践方式,所以找你们大佬讨论下。
    joson1205
        4
    joson1205  
       2019-07-30 17:46:21 +08:00
    @aaronhua 既然你都说了多线程调用问题,是不是用户登录的安全策略导致?很多系统都是限定一个用户只能限定一个客户端操作的,就像 QQ,这边登录了另外一边就强制下线
    lmingzhi08
        5
    lmingzhi08  
       2019-08-15 20:45:26 +08:00 via Android
    redis cookies 池?
    可以参考静觅的爬虫书《 Python3 网络爬虫开发实战》
    aaronhua
        6
    aaronhua  
    OP
       2019-08-16 09:25:33 +08:00
    @lmingzhi08 速度问题,都推荐使用 redis。(┬_┬)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1481 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:22 · PVG 01:22 · LAX 10:22 · JFK 13:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.