爬虫代理池

目的:

"""

1. 爬虫每次发起请求需要从代理池中提取一个可用代理, 如果提取的代理不可用, 从代理池中删除

2. 当代理池中的代理少于某个程度, 需要重新爬取一部分代理, 添加到代理池中

"""

用到的一些包(看个人需求)

import requests

# 连接数据库

import pymysql

# 第三方包的随机请求头

from fake_useragent import UserAgent

# 与 from lxml import etree 一样

from scrapy.selector import Selector


逻辑:

"""

1. 连接数据库, 获取游标

2. 准备请求头, 通过requests.get获得网页响应

3. 根据返回的数据创建Selector对象

selector = Selector(text=response.text)

4. 通过xpath查找数据(ip, port, life_time, ip_type)(因为免费的ip会有过期时间, 所以需要将过期时间较短的从中删除)

5. 根据ip查询数据, 如果查询有结果说明数据库中已经有这个信息

6. 插入数据之前, 需要判断ip是否已经存在, 如果已经存在, 就不用再次插入数据

7. 获取可用的ip, 获取可用ip之前, 判断ip个数, 这里设定一个范围如果ip个数小于多少时, 重新获取一次

8. 随机从数据库中取出一条数据, 这里是随机取出一行,需要执行完这条sql语句后加:

rs = cursor.fetchone()

# 取出ip信息

ip = rs[0]

port = rs[1]

ip_type = rs[2]

9. 测试这个ip是否有用, 这里可以使用:

try:

    proxy_dict={

            ip_type.lower():'{}://{}:{}'.format(ip_type.lower(), ip, port)}

    # requests使用代理发送请求

            response = requests.get('http://www.baidu.com', proxies=proxy_dict, timeout=0.5)

    # 这里设置延迟时间0.5秒, 检测这个ip能不能用. 我的想法是不仅能用而且要快, 当然这个时间可以进行你的需要来调整,但一般不超过2秒, 除非你是慢性子~~

except Exception as e:

            print(ip, '不可用')

            # 删除该ip

            delete_ip(ip)

            # 重新获取一个ip

else:

        return '{:}{}'.format(ip, port)

"""

注意: 写的可能不太详细, 但能通这个能明白大概逻辑就行, 如果想要源码可以留言 ! 博主爬取的是西刺




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

她最爱橘了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值