用户池使用说明
用户池分为三种,使用场景如下
GuestUserPool:游客用户池,用于从不需要登录的页面获取cookieNormalUserPool:普通用户池,管理大量账号的信息,从需要登录的页面获取cookieGoldUserPool:昂贵的用户池,用于账号单价较高,需要限制使用频率、使用时间的场景
GuestUserPool使用方式
环境:redis
导包
from typing import Optionalfrom feapder.network.user_pool import GuestUserfrom feapder.network.user_pool import GuestUserPool
默认的用户池
使用webdriver访问page_url生产cookie
user_pool = GuestUserPool("test:user_pool", page_url="https://www.baidu.com")
自定义登录方法
class CustomGuestUserPool(GuestUserPool):def login(self) -> Optional[GuestUser]:# 此处为假数据,正常需通过网站获取cookieuser = GuestUser(user_agent="xxx",proxies="yyy",cookies={"some_key": "some_value{}".format(time.time())},)return useruser_pool = CustomGuestUserPool("test:user_pool", min_users=10, keep_alive=True)
获取用户
无用户时会先登录生产用户
user = user_pool.get_user(block=True)print("取到user:", user)print("cookie:", user.cookies)print("user_agent:", user.user_agent)print("proxies:", user.proxies)
删除用户
user_pool.del_user(user.user_id)
维护一定数量的用户
run方法需单独起一个进程调用,此进程会常驻,当用户数不足时会及时补充
user_pool.run()
NormalUserPool使用方式
环境:redis、mysql
导包
from feapder.network.user_pool import NormalUserfrom feapder.network.user_pool import NormalUserPool
自定义登录的方法
class CustomNormalUserPool(NormalUserPool):def login(self, user: NormalUser) -> NormalUser:# 此处为假数据,正常需通过登录网站获取cookieusername = user.usernamepassword = user.password# 登录获取cookiecookie = "xxx"user.cookies = cookiereturn useruser_pool = CustomNormalUserPool("test:user_pool",table_userbase="test_userbase",login_retry_times=0,keep_alive=True,)
table_userbase 为mysql里存储用户信息的表,此表会自动创建,需手动录入用户账密
例如:

获取用户
无用户时会先登录生产用户
user = user_pool.get_user()print("取到user:", user)print("cookie:", user.cookies)print("user_agent:", user.user_agent)print("proxies:", user.proxies)
删除用户
user_pool.del_user(user.user_id)
维护一定数量的用户
run方法需单独起一个进程调用,此进程会常驻,当用户数不足时会及时补充
user_pool.run()
标记账号被封
以后不再使用
user_pool.tag_user_locked(user.user_id)
GoldUserPool使用方式
环境:redis
导包
from feapder.network.user_pool import GoldUserfrom feapder.network.user_pool import GoldUserPool
定义用户信息
users = [GoldUser(username="zhangsan",password="1234",max_use_times=10,use_interval=5,),GoldUser(username="lisi",password="1234",max_use_times=10,use_interval=5,login_interval=50,),]
自定义登录的方法
class CustomGoldUserPool(GoldUserPool):def login(self, user: GoldUser) -> GoldUser:# 此处为假数据,正常需通过登录网站获取cookieusername = user.usernamepassword = user.password# 登录获取cookiecookie = "zzzz"user.cookies = cookiereturn useruser_pool = CustomGoldUserPool("test:user_pool",users=users,keep_alive=True,)
获取用户
无用户时会先登录生产用户
user = user_pool.get_user()print("取到user:", user)print("cookie:", user.cookies)print("user_agent:", user.user_agent)print("proxies:", user.proxies)
获取指定用户
无用户时会先登录生产用户
user = user_pool.get_user(username="用户名")print("取到user:", user)print("cookie:", user.cookies)print("user_agent:", user.user_agent)print("proxies:", user.proxies)
删除用户
user_pool.del_user(user.user_id)
维护一定数量的用户
run方法需单独起一个进程调用,此进程会常驻,当用户数不足时会及时补充
user_pool.run()
用户延时使用
user_pool.delay_use(user.user_id, delay_seconds)
用户独占使用
某个用户被指定的爬虫独占使用,独占时间内其他爬虫不可使用
user = user_pool.get_user(username="用户名",used_for_spider_name="爬虫名")
