(异步爬虫)aiomysql剔除代理池中失效的IP

举报
Python新视野 发表于 2021/09/10 01:20:23 2021/09/10
【摘要】 (异步爬虫)aiomysql剔除代理池中失效的IP 最近写的几个爬虫,都因为IP被封的原因,爬取的数据很少,尽管已经限制访问的时间,但时间长了,一直使用同一个IP必然有风险。所以趁着现在课少,写...

(异步爬虫)aiomysql剔除代理池中失效的IP


最近写的几个爬虫,都因为IP被封的原因,爬取的数据很少,尽管已经限制访问的时间,但时间长了,一直使用同一个IP必然有风险。所以趁着现在课少,写了个简单的代理池(仅供自用),目前还在一步步完善。下面就异步mysql和异步IP测试来简单记录一下。

在这里插入图片描述
之前没怎么用协程,这次使用踩了不少坑。。话不多说直接开整。
首先要做的肯定是获取当前数据库中已有的ip。由于只取一次,就直接pymysql来进行操作了。

def query_db():
    conn = pymysql.Connect(host='127.0.0.1', port=3306, user='root', password='xxxxxx', db='proxy_pool', charset='utf8', autocommit=True)
    cur = conn.cursor()
    cur.execute("select ip from proxies")
    # result返回结果是元组,ip以元组的形式保存在元组内(('111.2.3.4:9999'),)
    result = cur.fetchall()
    return result

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

获取了数据,当然是ip测试,有用的留下,没用的删除。。

async def ip_test(proxy):
    async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session:
        try:
            async with session.get('http://httpbin.org/ip', proxy="http://{}".format(proxy), timeout=6) as response:
                print('ip可用', proxy)
        except Exception as e:
            await delete_ip(proxy)
            print(proxy, '已从库中删除')

async def delete_ip(proxy):
    conn = await aiomysql.connect(host='127.0.0.1', port=3306, user='root', password='xxxxxx', db='proxy_pool', charset='utf8',autocommit=True)
    cur = await conn.cursor()
    await cur.execute("delete from proxies where ip='{}'".format(proxy))
    await cur.close()
    conn.close()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

connector=aiohttp.TCPConnector(ssl=False) 这个参数最好加上,不然ssl证书可能报错。
最后上主函数代码

async def main():
	# 获取数据库中的ip元组
    ip_tup = query_db()
    async with aiohttp.ClientSession() as session:
    	# 将协程对象添加到任务列表
        tasks = [ip_test(''.join(proxy)) for proxy in ip_tup]
        await asyncio.wait(tasks)

if __name__=='__main__':
    asyncio.run(main())

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

文章来源: blog.csdn.net,作者:Dream丶Killer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_43965708/article/details/109608614

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。