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()
        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

完畢!
⚠️ 不懂的地方,歡迎在評論區留言~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章