import asyncio import re from crawlee.crawlers import BasicCrawler, BasicCrawlingContext from crawlee.proxy_configuration import ProxyConfiguration from crawlee.sessions import SessionPool async def main() -> None: # To use the proxy IP session rotation logic, you must turn the proxy usage on. proxy_configuration = ProxyConfiguration( # options ) # Initialize crawler with a custom SessionPool configuration # to manage concurrent sessions and proxy rotation crawler = BasicCrawler( proxy_configuration=proxy_configuration, # Activates the Session pool (default is true). use_session_pool=True, # Overrides default Session pool configuration. session_pool=SessionPool(max_pool_size=100), ) # Define the default request handler that manages session states @crawler.router.default_handler async def default_handler(context: BasicCrawlingContext) -> None: # Send request, BasicCrawler automatically selects a session from the pool # and sets a proxy for it. You can check it with `context.session` # and `context.proxy_info`. response = await context.send_request(context.request.url) page_content = (await response.read()).decode() title_match = re.search(r'