我预计的调用示例
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。(┬_┬)
|