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