python异步爬虫教程_利用Python实现异步代理爬虫及代理池方法

本文介绍如何使用Python的asyncio和相关库构建一个异步代理池,包括爬取免费代理、验证有效性并存储在Redis中,以及通过aiohttp实现的代理服务器。通过代理池获取代理,用于提高爬虫效率和应对反爬策略。
摘要由CSDN通过智能技术生成

本文主要介绍了Python实现异步代理爬虫及代理池的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧

使用python asyncio实现了一个异步代理池,根据规则爬取代理网站上的免费代理,在验证其有效后存入redis中,定期扩展代理的数量并检验池中代理的有效性,移除失效的代理。同时用aiohttp实现了一个server,其他的程序可以通过访问相应的url来从代理池中获取代理。

源码

环境Python 3.5+

Redis

PhantomJS(可选)

Supervisord(可选)

因为代码中大量使用了asyncio的async和await语法,它们是在Python3.5中才提供的,所以最好使用Python3.5及以上的版本,我使用的是Python3.6。

依赖redis

aiohttp

bs4

lxml

requests

selenium

selenium包主要是用来操作PhantomJS的。

下面来对代码进行说明。

1. 爬虫部分

核心代码async def start(self):

for rule in self._rules:

parser = asyncio.ensure_future(self._parse_page(rule)) # 根据规则解析页面来获取代理

logger.debug('{0} crawler started'.format(rule.rule_name))

if not rule.use_phantomjs:

await page_download(ProxyCrawler._url_generator(rule), self._pages, self._stop_flag) # 爬取代理网站的页面

else:

await page_download_phantomjs(ProxyCrawler._url_generator(rule), self._pages,

rule.phantomjs_load_flag, self._stop_flag) # 使用PhantomJS爬取

await self._pages.join()

parser.cancel()

logger.debug('{0} crawler finished'.format(rule.rule_name))

上面的核心代码实际上是一个用asyncio.Queue实现的生产-消费者模型,下面是该模型的一个简单实现:import asyncio

from random import random

async def produce(queue, n):

for x in range(1, n + 1):

print('produce ', x)

await asyncio.sleep(random())

await queue.put(x) # 向queue中放入item

async def consume(queue):

while 1:

item = await queue.get() # 等待从queue中获取item

print('consume ', item)

await asyncio.sleep(random())

queue.task_done() # 通知queue当前item处理完毕

async def run(n):

queue = asyncio.Queue()

consumer = asyncio.ensure_future(consume(queue))

await produce(queue, n) # 等待生产者结束

await queue.join() # 阻塞直到queue不为空

consumer.cancel() # 取消消费者任务,否则它会一直阻塞在get方法处

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值