scrapy框架配置随机延时、UA、IP

作为强大的采集框架scrapy,有几个基本配置,大家一定要掌握。下面猫哥一一为大家介绍。

随机延时
在scrapy框架settings.py文件中有一个默认的延时设置DOWNLOAD_DELAY = 2,这个设置的延时时间是固定的,也就是说每次请求的延时时间都是2秒。那么我想让延时时间随机的变动,也就是说假如我设置延时时间是5s,那么我希望每次延时会随机的从1-5s之间选择一个值进行延时。下面我们看一下用代码是如何实现的实现。
  1. 编辑settings.py文件
# 随机下载延迟
RANDOM_DELAY = 1
# MIDDLEWARES 设置
DOWNLOADER_MIDDLEWARES = {
   'DemoProjects.middlewares.RandomDelayMiddleware': 150,
}
  1. 编辑middlewares文件

# 设置随机延时
class RandomDelayMiddleware(object):
    def __init__(self, delay):
        self.delay = delay

    @classmethod
    def from_crawler(cls, crawler):
        delay = crawler.spider.settings.get("RANDOM_DELAY", 10)
        if not isinstance(delay, int):
            raise ValueError("RANDOM_DELAY need a int")
        return cls(delay)

    def process_request(self, request, spider):
        # delay = random.randint(0, self.delay)
        delay = random.uniform(0, self.delay)
        delay = float("%.1f" % delay)
        logging.debug("### random delay: %s s ###" % delay)
        time.sleep(delay)
随机UA
随机UA就很好理解了,就是在每次请求的时候,都使用不同的UA构造请求头,进行访问。我们可以使用第三方的一个插件fake_useragent,这个插件有码友专门维护,里面包含各种浏览器的UA头。实现代码如下:
  1. 编辑settings.py文件
# 设置随机UA
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"
RANDOM_UA_TYPE = "random"
# MIDDLEWARES 设置
DOWNLOADER_MIDDLEWARES = {
   'DemoProjects.middlewares.RandomUserAgentMiddlware': 100,
}
  1. 编辑middlewares文件

# pip install fake_useragent
# 导入UserAgent
from fake_useragent import UserAgent

# 随机更换user-agent方法
class RandomUserAgentMiddlware(object):
    def __init__(self, crawler):
        super(RandomUserAgentMiddlware, self).__init__()
        self.ua = UserAgent(use_cache_server=False, verify_ssl=False)
        self.ua_type = crawler.settings.get("RANDOM_UA_TYPE", "random")
    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler)

    def process_request(self, request, spider):
        def get_ua():
            # print(request.headers)
            return getattr(self.ua, self.ua_type)
        request.headers.setdefault('User-Agent', get_ua())
随机IP
IP的话,如果仅仅是做测试用,那么找一些免费的IP即可,猫哥这里有一个IP网站推荐给大家,它每天会公布大概20个免费的IP,质量还不错,猫哥亲测。如果是生产环境的话,尽量去买一些代理IP使用,而且最好是高匿的。一般的代理IP:第一,速度超级慢,严重影响效率。第二,没有任何的保密措施,对方不用采取任何行动,就可以查到你的真实IP,然后律师函就发过来了... 下面我们就用代码实现随机IP的设置。
  1. 编辑settings.py文件

# MIDDLEWARES 设置
DOWNLOADER_MIDDLEWARES = {
   'DemoProjects.middlewares.RandomUserAgentMiddlware': 50,
}
  1. 编辑middlewares文件
# GetIP方法是自己定义的,用于返回一个IP,IP格式:https://58.218.92.167:2303
import GetIP
class RandomProxyMiddleware(object):
    # 动态设置ip代理
    def process_request(self, request, spider):
        # 定义方法
        get_ip = GetIP()
        # 这里猫哥是设置了一个IP池,每次随机的从IP池里取出一个IP使用
        proxy_ip = get_ip.get_random_ip()
        # print("当前使用的代理IP是" + proxy_ip)
        request.meta["proxy"] = proxy_ip

完毕!
⚠️ 不懂的地方,欢迎在评论区留言~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值