<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      東小珂

      博客園 首頁 新隨筆 聯系 訂閱 管理

      下面我們來梳理一下這些庫的代理的設置方法。

       1.獲取代理

       

      在做測試之前,我們需要先獲取一個可用代理,搜索引擎搜索“代理”關鍵字,就可以看到有許多代理服務網站,在網站上會有很多免費代理,比如西刺:http://www.xicidaili.com/,這里列出了很多免費代理,但是這些免費代理大多數情況下都是不好用的,所以比較靠譜的方法是購買付費代理,很多網站都有售賣,數量不用多,買一個穩定可用的即可,可以自行選購。

       

      或者如果我們本機有相關代理軟件的話,軟件一般會在本機創建 HTTP 或 SOCKS 代理服務,直接使用此代理也可以。

       

      在這里我的本機安裝了一部代理軟件,它會在本地 9743 端口上創建 HTTP 代理服務,也就是代理為 127.0.0.1:9743,另外還會在 9742 端口創建 SOCKS 代理服務,也就是代理為 127.0.0.1:9742,我只要設置了這個代理就可以成功將本機 IP 切換到代理軟件連接的服務器的 IP了。

       

      所以本節下面的示例里我使用上述代理來演示其設置方法,你可以自行替換成自己的可用代理,設置代理后測試的網址是:http://httpbin.org/get,訪問該站點可以得到請求的一些相關信息,其中 origin 字段就是客戶端的 IP,我們可以根據它來判斷代理是否設置成功,也就是是否成功偽裝了IP。

       

      下面我們來看下各個庫的代理設置方式。

       

      2. Urllib

       

      首先我們以最基礎的 Urllib 為例,來看一下代理的設置方法,代碼如下:

       

      from urllib.error import URLError
      from urllib.request import ProxyHandler, build_opener
      
      proxy = '127.0.0.1:9743'
      proxy_handler = ProxyHandler({
          'http': 'http://' + proxy,
          'https': 'https://' + proxy
      })
      opener = build_opener(proxy_handler)
      try:
          response = opener.open('http://httpbin.org/get')
          print(response.read().decode('utf-8'))
      except URLError as e:
          print(e.reason)

       

      運行結果如下:

       

      {
        "args": {}, 
        "headers": {
          "Accept-Encoding": "identity", 
          "Connection": "close", 
          "Host": "httpbin.org", 
          "User-Agent": "Python-urllib/3.6"
        }, 
        "origin": "106.185.45.153", 
        "url": "http://httpbin.org/get"
      }

       

      在這里我們需要借助于 ProxyHandler 設置代理,參數是字典類型,鍵名為協議類型,鍵值是代理,注意此處代理前面需要加上協議,即 http 或者 https,此處設置了 http 和 https 兩種代理,當我們請求的鏈接是 http 協議的時候,它會調用 http 代理,當請求的鏈接是 https 協議的時候,它會調用https代理,所以此處生效的代理是:http://127.0.0.1:9743。

       

      創建完 ProxyHandler 對象之后,我們需要利用 build_opener() 方法傳入該對象來創建一個 Opener,這樣就相當于此 Opener 已經設置好代理了,接下來直接調用它的 open() 方法即可使用此代理訪問我們所想要的鏈接。

       

      運行輸出結果是一個 Json,它有一個字段 origin,標明了客戶端的 IP,此處的 IP 驗證一下,確實為代理的 IP,而并不是我們真實的 IP,所以這樣我們就成功設置好代理,并可以隱藏真實 IP 了。

       

      如果遇到需要認證的代理,我們可以用如下的方法設置:

       

      from urllib.error import URLError
      from urllib.request import ProxyHandler, build_opener
      
      proxy = 'username:password@127.0.0.1:9743'
      proxy_handler = ProxyHandler({
          'http': 'http://' + proxy,
          'https': 'https://' + proxy
      })
      opener = build_opener(proxy_handler)
      try:
          response = opener.open('http://httpbin.org/get')
          print(response.read().decode('utf-8'))
      except URLError as e:
          print(e.reason)

       

      這里改變的只是 proxy 變量,只需要在代理前面加入代理認證的用戶名密碼即可,其中 username 就是用戶名,password 為密碼,例如 username 為foo,密碼為 bar,那么代理就是 foo:bar@127.0.0.1:9743。

       

      如果代理是 SOCKS5 類型,那么可以用如下方式設置代理:

       

      import socks
      import socket
      from urllib import request
      from urllib.error import URLError
      
      socks.set_default_proxy(socks.SOCKS5, '127.0.0.1', 9742)
      socket.socket = socks.socksocket
      try:
          response = request.urlopen('http://httpbin.org/get')
          print(response.read().decode('utf-8'))
      except URLError as e:
          print(e.reason)

       

      此處需要一個 Socks 模塊,可以通過如下命令安裝:

       

      pip3 install PySocks

       

      本地我有一個 SOCKS5 代理,運行在 9742 端口,運行成功之后和上文 HTTP 代理輸出結果是一樣的:

      {
        "args": {}, 
        "headers": {
          "Accept-Encoding": "identity", 
          "Connection": "close", 
          "Host": "httpbin.org", 
          "User-Agent": "Python-urllib/3.6"
        }, 
        "origin": "106.185.45.153", 
        "url": "http://httpbin.org/get"
      }

       

      結果的 origin 字段同樣為代理的 IP,設置代理成功。

       

      3. Requests

       

      對于 Requests 來說,代理設置更加簡單,我們只需要傳入 proxies 參數即可。

      還是以上例中的代理為例,我們來看下 Requests 的代理的設置:

       

      import requests
      
      proxy = '127.0.0.1:9743'
      proxies = {
          'http': 'http://' + proxy,
          'https': 'https://' + proxy,
      }
      try:
          response = requests.get('http://httpbin.org/get', proxies=proxies)
          print(response.text)
      except requests.exceptions.ConnectionError as e:
          print('Error', e.args)

       

      運行結果:

       

      {
        "args": {}, 
        "headers": {
          "Accept": "*/*", 
          "Accept-Encoding": "gzip, deflate", 
          "Connection": "close", 
          "Host": "httpbin.org", 
          "User-Agent": "python-requests/2.18.1"
        }, 
        "origin": "106.185.45.153", 
        "url": "http://httpbin.org/get"
      }

       

       

      可以發現 Requests 的代理設置比 Urllib 簡單很多,只需要構造代理字典即可,然后通過 proxies 參數即可設置代理,不需要重新構建 Opener。

       

      可以發現其運行結果的 origin 也是代理的 IP,證明代理已經設置成功。

       

      如果代理需要認證,同樣在代理的前面加上用戶名密碼即可,代理的寫法就變成:

       

      proxy = 'username:password@127.0.0.1:9743'

       

      和 Urllib 一樣,只需要將 username 和 password 替換即可。

       

      如果需要使用 SOCKS5 代理,則可以使用如下方式:

       

      import requests
      
      proxy = '127.0.0.1:9742'
      proxies = {
          'http': 'socks5://' + proxy,
          'https': 'socks5://' + proxy
      }
      try:
          response = requests.get('http://httpbin.org/get', proxies=proxies)
          print(response.text)
      except requests.exceptions.ConnectionError as e:
          print('Error', e.args)

       

      在這里需要額外安裝一個 Socks 模塊,命令如下:

       

      pip3 install "requests[socks]"

       

      運行結果是完全相同的:

       

      {
        "args": {}, 
        "headers": {
          "Accept": "*/*", 
          "Accept-Encoding": "gzip, deflate", 
          "Connection": "close", 
          "Host": "httpbin.org", 
          "User-Agent": "python-requests/2.18.1"
        }, 
        "origin": "106.185.45.153", 
        "url": "http://httpbin.org/get"
      }

       

      另外還有一種設置方式,和 Urllib 中的方法相同,使用 socks 模塊,也需要像上文一樣安裝該庫,設置方法如下:

       

      import requests
      import socks
      import socket
      
      socks.set_default_proxy(socks.SOCKS5, '127.0.0.1', 9742)
      socket.socket = socks.socksocket
      try:
          response = requests.get('http://httpbin.org/get')
          print(response.text)
      except requests.exceptions.ConnectionError as e:
          print('Error', e.args)

       

       

      這樣也可以設置 SOCKS5 代理,運行結果完全相同,相比第一種方法,此方法是全局設置,不同情況可以選用不同的方法。

       

      4. Selenium

       

      Selenium 同樣也可以設置代理,在這里分兩種介紹,一個是有界面瀏覽器,以 Chrome 為例介紹,另一種是無界面瀏覽器,以 PhantomJS 為例介紹。

       

      Chrome

       

      對于 Chrome 來說,用 Selenium 設置代理的方法也非常簡單,設置方法如下:

       

      from selenium import webdriver
      
      proxy = '127.0.0.1:9743'
      chrome_options = webdriver.ChromeOptions()
      chrome_options.add_argument('--proxy-server=http://' + proxy)
      browser = webdriver.Chrome(chrome_options=chrome_options)
      browser.get('http://httpbin.org/get')

       

      在這里我們通過 ChromeOptions 來設置代理,在創建 Chrome 對象的時候通過 chrome_options 參數傳遞即可。

       

      這樣在運行之后便會彈出一個 Chrome 瀏覽器,訪問目標鏈接之后輸出結果如下:

       

      {
        "args": {}, 
        "headers": {
          "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", 
          "Accept-Encoding": "gzip, deflate", 
          "Accept-Language": "zh-CN,zh;q=0.8", 
          "Connection": "close", 
          "Host": "httpbin.org", 
          "Upgrade-Insecure-Requests": "1", 
          "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
        }, 
        "origin": "106.185.45.153", 
        "url": "http://httpbin.org/get"
      }

       

      可以看到 origin 同樣為代理 IP 的地址,代理設置成功。

       

      如果代理是認證代理,則設置方法相對比較麻煩,方法如下:

       

      from selenium import webdriver
      from selenium.webdriver.chrome.options import Options
      import zipfile
      
      ip = '127.0.0.1'
      port = 9743
      username = 'foo'
      password = 'bar'
      
      manifest_json = """
      {
          "version": "1.0.0",
          "manifest_version": 2,
          "name": "Chrome Proxy",
          "permissions": [
              "proxy",
              "tabs",
              "unlimitedStorage",
              "storage",
              "<all_urls>",
              "webRequest",
              "webRequestBlocking"
          ],
          "background": {
              "scripts": ["background.js"]
          }
      }
      """
      
      background_js = """
      var config = {
              mode: "fixed_servers",
              rules: {
                singleProxy: {
                  scheme: "http",
                  host: "%(ip)s",
                  port: %(port)s
                }
              }
            }
      
      chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
      
      function callbackFn(details) {
          return {
              authCredentials: {
                  username: "%(username)s",
                  password: "%(password)s"
              }
          }
      }
      
      chrome.webRequest.onAuthRequired.addListener(
                  callbackFn,
                  {urls: ["<all_urls>"]},
                  ['blocking']
      )
      """ % {'ip': ip, 'port': port, 'username': username, 'password': password}
      
      plugin_file = 'proxy_auth_plugin.zip'
      with zipfile.ZipFile(plugin_file, 'w') as zp:
          zp.writestr("manifest.json", manifest_json)
          zp.writestr("background.js", background_js)
      chrome_options = Options()
      chrome_options.add_argument("--start-maximized")
      chrome_options.add_extension(plugin_file)
      browser = webdriver.Chrome(chrome_options=chrome_options)
      browser.get('http://httpbin.org/get')

       

      在這里需要在本地創建一個 manifest.json 配置文件和 background.js 腳本來設置認證代理,運行之后本地會生成一個 proxy_auth_plugin.zip 文件保存配置。

      運行結果和上例一致,origin 同樣為代理 IP。

       

      PhantomJS

       

      對于 PhantomJS,代理設置方法可以借助于 service_args 參數,也就是命令行參數,代理設置方法如下:

       

      from selenium import webdriver
      
      service_args = [
          '--proxy=127.0.0.1:9743',
          '--proxy-type=http'
      ]
      browser = webdriver.PhantomJS(service_args=service_args)
      browser.get('http://httpbin.org/get')
      print(browser.page_source)

       

      在這里我們只需要使用 service_args 參數,將命令行的一些參數定義為列表,在初始化的時候傳遞即可。

       

      運行結果:

       

      {
        "args": {}, 
        "headers": {
          "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
          "Accept-Encoding": "gzip, deflate", 
          "Accept-Language": "zh-CN,en,*", 
          "Connection": "close", 
          "Host": "httpbin.org", 
          "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.0 Safari/538.1"
        }, 
        "origin": "106.185.45.153", 
        "url": "http://httpbin.org/get"
      }

       

      運行結果的 origin 同樣為代理的 IP,設置代理成功。

       

      如果需要認證,那么只需要再加入 --proxy-auth 選項即可,這樣參數就改為:

       

      service_args = [
          '--proxy=127.0.0.1:9743',
          '--proxy-type=http',
          '--proxy-auth=username:password'
      ]

       

      將 username 和 password 替換為認證所需的用戶名和密碼即可。

      posted on 2017-11-10 11:37  東小珂  閱讀(198)  評論(0)    收藏  舉報
      主站蜘蛛池模板: b站永久免费看片大全| 新密市| 国产成人午夜福利在线观看| 国产精品区免费视频| 精品久久精品午夜精品久久| 日本一区二区三区四区黄色| 亚洲大尺度无码专区尤物| 含紧一点h边做边走动免费视频| 成人免费毛片aaaaaa片| 亚洲成色精品一二三区| 无码人妻出轨黑人中文字幕| 欧洲国产成人久久精品综合| 国产揄拍国产精品| 亚洲肥老太bbw中国熟女| 国产精品自在自线免费观看| 亚洲一区二区啊射精日韩| 四虎成人精品永久网站| 88国产精品视频一区二区三区| 亚洲国产成人久久综合区| 国产区精品福利在线熟女| 亚洲一区国色天香| 莱阳市| 亚洲自拍偷拍福利小视频| 日韩精品卡1卡2日韩在线| 人妻体体内射精一区二区| 亚洲天堂在线观看完整版| 少妇人妻挤奶水中文视频毛片 | 亚洲激情一区二区三区在线| 久久精品国产亚洲av天海翼| 国产不卡精品视频男人的天堂| 午夜福利电影| 无码精品人妻一区二区三李一桐| 中文国产不卡一区二区| 在线免费观看毛片av| 亚洲爆乳少妇无码激情| 中文字幕av一区二区| 国产精品视频全国免费观看| 亚洲乳大丰满中文字幕| 免费观看欧美猛交视频黑人| 一道本AV免费不卡播放| 婷婷综合亚洲|