Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
225 lines (185 loc) · 4.9 KB

File metadata and controls

225 lines (185 loc) · 4.9 KB
Copy raw file
Download raw file
Outline
Edit and raw actions

用户池使用说明

用户池分为三种,使用场景如下

  1. GuestUserPool:游客用户池,用于从不需要登录的页面获取cookie
  2. NormalUserPool:普通用户池,管理大量账号的信息,从需要登录的页面获取cookie
  3. GoldUserPool:昂贵的用户池,用于账号单价较高,需要限制使用频率、使用时间的场景

GuestUserPool使用方式

环境:redis

导包

from typing import Optional

from feapder.network.user_pool import GuestUser
from 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]:
        # 此处为假数据,正常需通过网站获取cookie
        user = GuestUser(
            user_agent="xxx",
            proxies="yyy",
            cookies={"some_key": "some_value{}".format(time.time())},
        )
        return user

user_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 NormalUser
from feapder.network.user_pool import NormalUserPool

自定义登录的方法

class CustomNormalUserPool(NormalUserPool):
    def login(self, user: NormalUser) -> NormalUser:
        # 此处为假数据,正常需通过登录网站获取cookie
        username = user.username
        password = user.password

        # 登录获取cookie
        cookie = "xxx"
        user.cookies = cookie

        return user

user_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 GoldUser
from 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:
        # 此处为假数据,正常需通过登录网站获取cookie
        username = user.username
        password = user.password

        # 登录获取cookie
        cookie = "zzzz"
        user.cookies = cookie

        return user

user_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="爬虫名"
)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.