国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python3爬蟲里關(guān)于代理的設(shè)置總結(jié)

Python3爬蟲里關(guān)于代理的設(shè)置總結(jié)

2020-07-31 00:16愛喝馬黛茶的安東尼 Python

在本篇文章里小編給大家整理的是一篇關(guān)于Python3爬蟲里關(guān)于代理的設(shè)置總結(jié),需要的朋友們可以參考下。

在前面我們介紹了多種請(qǐng)求庫(kù),如 Requests、Urllib、Selenium 等。我們接下來(lái)首先貼近實(shí)戰(zhàn),了解一下代理怎么使用,為后面了解代理池、ADSL 撥號(hào)代理的使用打下基礎(chǔ)。

下面我們來(lái)梳理一下這些庫(kù)的代理的設(shè)置方法。

1. 獲取代理

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

或者如果我們本機(jī)有相關(guān)代理軟件的話,軟件一般會(huì)在本機(jī)創(chuàng)建 HTTP 或 SOCKS 代理服務(wù),直接使用此代理也可以。

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

所以本節(jié)下面的示例里我使用上述代理來(lái)演示其設(shè)置方法,你可以自行替換成自己的可用代理,設(shè)置代理后測(cè)試的網(wǎng)址是:http://httpbin.org/get,訪問該站點(diǎn)可以得到請(qǐng)求的一些相關(guān)信息,其中 origin 字段就是客戶端的 IP,我們可以根據(jù)它來(lái)判斷代理是否設(shè)置成功,也就是是否成功偽裝了IP。

下面我們來(lái)看下各個(gè)庫(kù)的代理設(shè)置方式。

2. Urllib

首先我們以最基礎(chǔ)的 Urllib 為例,來(lái)看一下代理的設(shè)置方法,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)

運(yùn)行結(jié)果如下:

?
1
2
3
4
5
6
7
8
9
10
11
{
  "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 設(shè)置代理,參數(shù)是字典類型,鍵名為協(xié)議類型,鍵值是代理,注意此處代理前面需要加上協(xié)議,即 http 或者 https,此處設(shè)置了 http 和 https 兩種代理,當(dāng)我們請(qǐng)求的鏈接是 http 協(xié)議的時(shí)候,它會(huì)調(diào)用 http 代理,當(dāng)請(qǐng)求的鏈接是 https 協(xié)議的時(shí)候,它會(huì)調(diào)用https代理,所以此處生效的代理是:http://127.0.0.1:9743。

創(chuàng)建完 ProxyHandler 對(duì)象之后,我們需要利用 build_opener() 方法傳入該對(duì)象來(lái)創(chuàng)建一個(gè) Opener,這樣就相當(dāng)于此 Opener 已經(jīng)設(shè)置好代理了,接下來(lái)直接調(diào)用它的 open() 方法即可使用此代理訪問我們所想要的鏈接。

運(yùn)行輸出結(jié)果是一個(gè) Json,它有一個(gè)字段 origin,標(biāo)明了客戶端的 IP,此處的 IP 驗(yàn)證一下,確實(shí)為代理的 IP,而并不是我們真實(shí)的 IP,所以這樣我們就成功設(shè)置好代理,并可以隱藏真實(shí) IP 了。

如果遇到需要認(rèn)證的代理,我們可以用如下的方法設(shè)置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 變量,只需要在代理前面加入代理認(rèn)證的用戶名密碼即可,其中 username 就是用戶名,password 為密碼,例如 username 為foo,密碼為 bar,那么代理就是 foo:bar@127.0.0.1:9743。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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)

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

?
1
pip3 install PySocks

本地我有一個(gè) SOCKS5 代理,運(yùn)行在 9742 端口,運(yùn)行成功之后和上文 HTTP 代理輸出結(jié)果是一樣的:

?
1
2
3
4
5
6
7
8
9
10
11
{
  "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"
}

結(jié)果的 origin 字段同樣為代理的 IP,設(shè)置代理成功。

3. Requests

對(duì)于 Requests 來(lái)說(shuō),代理設(shè)置更加簡(jiǎn)單,我們只需要傳入 proxies 參數(shù)即可。

還是以上例中的代理為例,我們來(lái)看下 Requests 的代理的設(shè)置:

?
1
2
3
4
5
6
7
8
9
10
11
12
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)

運(yùn)行結(jié)果:

?
1
2
3
4
5
6
7
8
9
10
11
12
{
  "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"
}

可以發(fā)現(xiàn) Requests 的代理設(shè)置比 Urllib 簡(jiǎn)單很多,只需要構(gòu)造代理字典即可,然后通過 proxies 參數(shù)即可設(shè)置代理,不需要重新構(gòu)建 Opener。

可以發(fā)現(xiàn)其運(yùn)行結(jié)果的 origin 也是代理的 IP,證明代理已經(jīng)設(shè)置成功。

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

?
1
proxy = 'username:password@127.0.0.1:9743'

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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)

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

?
1
pip3 install "requests[socks]"

運(yùn)行結(jié)果是完全相同的:

?
1
2
3
4
5
6
7
8
9
10
11
12
{
  "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"
}

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

?
1
2
3
4
5
6
7
8
9
10
11
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)

這樣也可以設(shè)置 SOCKS5 代理,運(yùn)行結(jié)果完全相同,相比第一種方法,此方法是全局設(shè)置,不同情況可以選用不同的方法。

4. Selenium

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

Chrome

對(duì)于 Chrome 來(lái)說(shuō),用 Selenium 設(shè)置代理的方法也非常簡(jiǎn)單,設(shè)置方法如下:

?
1
2
3
4
5
6
7
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 來(lái)設(shè)置代理,在創(chuàng)建 Chrome 對(duì)象的時(shí)候通過 chrome_options 參數(shù)傳遞即可。

這樣在運(yùn)行之后便會(huì)彈出一個(gè) Chrome 瀏覽器,訪問目標(biāo)鏈接之后輸出結(jié)果如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "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 的地址,代理設(shè)置成功。

如果代理是認(rèn)證代理,則設(shè)置方法相對(duì)比較麻煩,方法如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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')

在這里需要在本地創(chuàng)建一個(gè) manifest.json 配置文件和 background.js 腳本來(lái)設(shè)置認(rèn)證代理,運(yùn)行之后本地會(huì)生成一個(gè) proxy_auth_plugin.zip 文件保存配置。

運(yùn)行結(jié)果和上例一致,origin 同樣為代理 IP。

PhantomJS

對(duì)于 PhantomJS,代理設(shè)置方法可以借助于 service_args 參數(shù),也就是命令行參數(shù),代理設(shè)置方法如下:

?
1
2
3
4
5
6
7
8
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 參數(shù),將命令行的一些參數(shù)定義為列表,在初始化的時(shí)候傳遞即可。

運(yùn)行結(jié)果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "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"
}

運(yùn)行結(jié)果的 origin 同樣為代理的 IP,設(shè)置代理成功。

如果需要認(rèn)證,那么只需要再加入 –proxy-auth 選項(xiàng)即可,這樣參數(shù)就改為:

?
1
2
3
4
5
service_args = [
    '--proxy=127.0.0.1:9743',
    '--proxy-type=http',
    '--proxy-auth=username:password'
]

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

5. 本節(jié)代碼

本節(jié)代碼地址為:https://github.com/Python3WebSpider/ProxySettings

6. 結(jié)語(yǔ)

本節(jié)介紹了前文所介紹的請(qǐng)求庫(kù)的代理設(shè)置方法,稍作了解即可,后面我們會(huì)使用這些方法來(lái)搭建代理池和爬取網(wǎng)站,進(jìn)一步加深印象。

原文鏈接:https://www.py.cn/spider/advanced/14436.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 黄色福利视频 | 九九久久国产 | 欧美在线a | 日本中文字幕在线观看 | 五月激情综合网 | 国产精品二区一区二区aⅴ污介绍 | 在线观看成人 | 色网站视频 | 福利片一区二区 | 亚洲成av人片一区二区梦乃 | 男插女青青影院 | 亚洲在线一区 | 久久一日本道色综合久久 | 色视频www在线播放国产人成 | 亚洲字幕成人中文在线观看 | 久久久精品日本 | 欧美日韩91 | 欧美一区二区三区视频在线观看 | 在线视频一区二区三区 | 精品久久一二三区 | 天堂av在线免费观看 | 久久国产亚洲精品 | 色在线免费观看 | 国产高清不卡在线 | 国产综合久久久 | 99热手机在线观看 | 日韩成人在线观看 | 在线视频a | 亚洲精品久久久久久久久久久 | 久久久久国产一级毛片高清片 | 国产自产高清不卡 | 午夜精品久久久久 | 日韩欧美在线免费观看 | 91久久精品国产91久久 | 亚洲精彩视频在线 | 日韩精品视频在线 | 超碰人人操| 一区二区三区免费看 | 久久男人免费视频 | 日韩一区精品视频 | 亚洲视频一区二区三区 |