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@classmethoddef 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")@classmethoddef 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

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部