# ç¨æ·æ± 使ç¨è¯´æ ç¨æ·æ± å为ä¸ç§ï¼ä½¿ç¨åºæ¯å¦ä¸ 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="ç¬è«å" ) ```