1. <rp id="c4hsd"></rp>
          1. <button id="c4hsd"><acronym id="c4hsd"><input id="c4hsd"></input></acronym></button>
          2. <tbody id="c4hsd"></tbody>

            <dd id="c4hsd"><pre id="c4hsd"></pre></dd>

              1. <th id="c4hsd"></th>
              2. <s id="c4hsd"><object id="c4hsd"></object></s>

                    [ 登錄 ] - [ 注冊 ] | 代碼示例DEMO | IP測試視頻 |

                    在Scrapy中使用爬蟲動態代理IP(Python3)

                    作者:數據無憂   時間:2020-09-18 13:24:53
                    本文介紹如何在Scrapy中使用無憂代理家的爬蟲動態代理IP,以及如何設置User-Agent.

                    一、創建Scrapy工程
                    • scrapy startproject 工程名
                    二、進入工程目錄,根據爬蟲模板生成爬蟲文件
                    • scrapy genspider -l # 查看可用模板
                    • scrapy genspider -t 模板名 爬蟲文件名 允許的域名
                    三、定義爬取關注的數據(items.py文件)
                    四、編寫爬蟲文件
                    五、設置IP池或用戶代理

                    1. 在settings.py同級目錄下新建一個文件data5u.py(第8步會用到),添加如下代碼:

                    IPPOOL = [ ]

                    2. 創建下載中間文件middlewares.py(與settings.py同一個目錄),代碼如下:

                    # -*- coding: UTF-8 -*-
                    '''
                    Python 3.x
                    無憂代理IP Created on 2018年07月11日
                    描述:本段代碼是Scrapy的代理中間件,用于設置代理IP
                    @author: www.aooseo.com
                    '''
                    # 導入隨機模塊
                    import random
                    # 導入data5u文件中的IPPOOL
                    from data5u import IPPOOL
                    # 導入官方文檔對應的HttpProxyMiddleware
                    from scrapy.contrib.downloadermiddleware.httpproxy import HttpProxyMiddleware

                    class IPPOOlS(HttpProxyMiddleware):
                      # 初始化
                      def __init__(self, ip=''):
                      self.ip = ip

                      # 請求處理
                      def process_request(self, request, spider):
                      # 先隨機選擇一個IP
                      thisip = random.choice(IPPOOL)
                      print("當前使用IP是:"+ thisip)
                      request.meta["proxy"] = "http://"+thisip

                    3. 在settings.py中配置下載中間件,代碼如下:

                    # 配置下載中間件的連接信息
                    DOWNLOADER_MIDDLEWARES = {
                       'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':123,
                      'modetest.middlewares.IPPOOlS' : 125    
                    }

                    4. 在settings.py文件中添加用戶UserAgent的信息,如:

                    # 設置用戶代理池
                    UAPOOL= [
                    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0", 
                    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", 
                    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
                    ]

                    5. 創建下載中間文件uamid.py(與settings.py同一個目錄),代碼為:

                    # -*- coding: UTF-8 -*-
                    '''
                    Python 3.x
                    無憂代理IP Created on 2018年07月11日
                    描述:本段代碼是Scrapy的下載中間件,用于模擬UserAgent
                    @author: www.aooseo.com
                    '''
                    # 導入隨機模塊
                    import random
                    # 導入settings文件中的UAPOOL
                    from settings import UAPOOL
                    # 導入官方文檔對應的HttpProxyMiddleware
                    from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware

                    class Uamid(UserAgentMiddleware):
                      # 初始化 注意一定要user_agent,不然容易報錯   
                      def __init__(self, user_agent=''):
                      self.user_agent = user_agent

                      # 請求處理
                      def process_request(self, request, spider):
                        # 先隨機選擇一個用戶代理
                        thisua = random.choice(UAPOOL)
                        print("當前使用User-Agent是:"+thisua)
                        request.headers.setdefault('User-Agent',thisua)

                    6. 在settings.py中配置下載中間件(合并了第三步的代碼):

                    # 配置下載中間件的連接信息
                    DOWNLOADER_MIDDLEWARES = {
                       'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 2,
                       'modetest.uamid.Uamid': 1    
                    }

                    7. 整體的settings.py代碼如下:

                    # -*- coding: UTF-8 -*-
                    '''
                    Python 3.x
                    無憂代理IP Created on 2018年07月11日
                    描述:本段代碼是Scrapy的配置信息
                    @author: www.aooseo.com
                    '''

                    #========================================

                    # 設置IP池和用戶UserAgent

                    #  禁止本地Cookie
                    COOKIES_ENABLED = False

                    # 設置用戶代理池
                    UAPOOL = [
                    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0", 
                    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", 
                    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
                    ]

                    # 配置下載中間件的連接信息
                    DOWNLOADER_MIDDLEWARES = {
                        'scrapy.contrib.downloadermiddlewares.httpproxy.HttpProxyMiddleware':123,
                        'modetest.middlewares.IPPOOlS' : 125,
                        'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 2,
                        'modetest.uamid.Uamid': 1
                    }

                    #============================================

                    8. 定義一個線程,定時從無憂代理API接口中獲取IP,存入data5u.py中的IPPOOL變量中,代碼如下:

                    # -*- coding: UTF-8 -*-
                    '''
                    Python 3.x
                    無憂代理IP Created on 2018年07月11日
                    描述:本段代碼定時從無憂代理API接口獲取代理IP,存入IP池中
                    @author: www.aooseo.com
                    '''
                    import requests;
                    import time;
                    import threading;
                    from data5u import IPPOOL;
                    from requests.packages import urllib3;

                    # 獲取代理IP的線程類
                    class GetIpThread(threading.Thread):
                        def __init__(self,apiUrl, fetchSecond):
                            super(GetIpThread, self).__init__();
                            self.fetchSecond=fetchSecond;
                            self.apiUrl=apiUrl;
                        def run(self):
                            while True:
                                # 獲取IP列表
                                res = requests.get(self.apiUrl).content.decode()
                                # 按照\n分割獲取到的IP
                                IPPOOL = res.split('\n');
                                # 休眠
                                time.sleep(self.fetchSecond);

                    9. 在您爬蟲的啟動類(if __name__ == '__main__':)里面添加如下代碼定時獲取代理IP:

                        # 這里填寫無憂代理IP提供的API訂單號(請到用戶中心獲?。?/font>
                        order = "請把這里替換為您的IP提取碼";
                        # 獲取IP的API接口
                        apiUrl = "http://api.ip.data5u.com/dynamic/get.html?order=" + order;
                        # 獲取IP時間間隔,建議為5秒
                        fetchSecond = 5;
                        # 開始自動獲取IP
                        GetIpThread(apiUrl, fetchSecond).start();

                    ------------------------文章到此結束-----------------------------

                    無憂代理IP(www.aooseo.com)原創文章,轉載請注明出處。

                    電話:4007-745-096
                    QQ:
                    周一至周日8:30-18:00 技術部電話熱線
                    久久夜色精品国产噜噜亚洲AV_老妇女性较大毛片_888亚洲欧美国产va在线播放_超碰人人透人人爽人人看