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

2019-07-25 10:26:59 +08:00
 aaronhua

面向的系统的特点

  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

1540 次点击
所在节点    Python
6 条回复
aaronhua
2019-07-25 10:42:36 +08:00
一直在做一些办公系统的爬虫,因为不能频繁登录,所以提取 cookies,保存到 sqlite3 数据库,使用的时候再提取出来。因为对 flask 的调用方式有好感,所以就写成这种调用方式了。(狗头)
joson1205
2019-07-26 09:13:45 +08:00
难道 cookies 没有时效性的??
aaronhua
2019-07-26 09:39:08 +08:00
@joson1205 需要添加代码去保存 cookies,我之前使用 pickle 去保存 session,但是多线程下调用有问题。我也一直没有想清楚这个问题。会不会有更好的实践方式,所以找你们大佬讨论下。
joson1205
2019-07-30 17:46:21 +08:00
@aaronhua 既然你都说了多线程调用问题,是不是用户登录的安全策略导致?很多系统都是限定一个用户只能限定一个客户端操作的,就像 QQ,这边登录了另外一边就强制下线
lmingzhi08
2019-08-15 20:45:26 +08:00
redis cookies 池?
可以参考静觅的爬虫书《 Python3 网络爬虫开发实战》
aaronhua
2019-08-16 09:25:33 +08:00
@lmingzhi08 速度问题,都推荐使用 redis。(┬_┬)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/586023

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX