response对象设置返回状态_爬虫代理之设置

#coding:utf-8

#获取代理,有很多免费代理,比如西刺:http://www.xicidaili.com/。比较靠谱的方法是购买付费代理。

# 如果本机有相关代理软件的话,软件一般会在本机创建HTTP 或SOCKS 代理服务,本机直接使用此代理也可以。

#CCproxy,它会在本地9743 端口上创建HTTP 代理服务,即代理为127.0.0.1:9743 ,

# 另外还会在9742 端口创建SOCKS 代理服务,即代理为127.0.0.l:9742 。

# 设置代理后测试的网址是:http://httpbin.org/get ,

# 其中origin宇段就是客户端的I P , 我们可以根据它来判断代理是否设置成功,即是否成功伪装了IP.

#首先,我们以最基础的urllib 为例,来看一下代理的设置方法,

#这里我们需要借助ProxyHandler 设置代理,参数是字典类型,键名为协议类型,键值是代理。注意,此处代理前面需要加上协议,

# 即http 或者https 。当请求的链接是http 协议的时候, Proxy Handler会调用http 代理。当请求的链接是ht阳协议的时候,

# 会调用https 代理。此处生效的代理是:http://127.0.0.1:9743。创建完ProxyHandler 对象之后,

# 我们需要利用build_opener ()方法传入该对象来创建一个Opener,这样就相当于此Opener 已经设置好代理了。

# 接下来直接调用Opener 对象的open()方法。运行结果是一个JSON ,它有一个字段origin,标明了客户端的IP 。

# 验证一下,此处的IP 确实为代理的lP ,并不是真实的IP 。这样我们就成功设置好代理,并可以隐藏真实IP。

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)

#如果遇到需要认证的代理,这里改变的只是proxy 变量,我们只需要在代理前面加入代理认证的用户名密码即可。

# username 是用户名, password 是密码,username 为foo ,密码为bar ,代理就是foo:bar@127.0.0.1:9743 。

from urllib.error import URLError

from urllib.request import ProxyHandler, build_opener

proxy = 'foo:bar@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)

#如果代理是SOCKS5 类型,需要一个socks 模块,pip3 install PySocks

import socks

import socket

from urllib import request

from urllib.error import URLError

socks.set_default_proxy(socks.SOCKS5, '127.0.0.1', 1080)

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)

#requests,它只需要构造代理字典,然后通过proxies 参数即可,而不需要重新构建Opener其运行结果的叫也是代理的IP.

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)

#如果代理需要认证,同样在代理的前面加上用户名密码即可代理的写法就变成如下所示:

#proxy= 'username:password@127.0.0.1:9743'

#如果需要使用SOCKS5 代理,我们需要额外安装一个模块,这个模块叫作requests[socks]

import requests

proxy = '127.0.0.1:1080'

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)

#还有一种设置方式,和urllib 中的方法相同,使用socks 模块,也需要像上文一样安装socks库。

# 使用这种方法也可以设置SOCKS5 代理,运行结果完全相同。相比第一种方法,此方法是全局设置。

import requests

import socks

import socket

socks.set_default_proxy(socks.SOCKS5, '127.0.0.1', 1080)

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)

#Selenium,包括两种方式: 一种是有界面浏览器,以Chrome为例;另一种是无界面浏览器,以PhantomJS 为例。

# Chrome,通过ChromeOptions来设置代理,在创建Chrome对象的时候用chrome_options 参数传递即可。

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

#chrome headless模式:

import time

from selenium import webdriver

"""使用无界面模式"""

option = webdriver.ChromeOptions()

option.add_argument('--headless') # 开启无界面模式

option.add_argument('--disable-gpu') # 禁用显卡

option.add_argument("--user-agent=Mozilla/5.0 HAHA") # 替换UA

proxy_str = '127.0.0.1 :9743'

option.add_argument('--proxy-server=https://{}'.format(proxy_str)) # 使用代理ip

browser = webdriver.Chrome(chrome_options=option)

browser.get('http://httpbin.org/get')

time.sleep(3)

print(browser.page_source)

browser.quit()

#如果代理是认证代理,在本地创建一个manifest.json 配置文{牛和background. 脚本来设置认证代理。

# 运行代码之后本地会生成一个proxy_auth_plugin.zip 文件来保存当前配置。

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",

        "",

        "webRequest",

        "webRequestBlocking"

    ],

    "background" : {

        "scripts" : ["background.js"]

    },

    "minimum_chrome_version":"85.0.4183.83"

}

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 : [""]},

    ["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_argument('--disable-gpu') # 禁用显卡

chrome_options.add_argument("--user-agent=Mozilla/5.0 HAHA") # 替换UA

chrome_options.add_argument('--no-sandbox')

chrome_options.add_extension(plugin_file)

browser = webdriver.Chrome(chrome_options=chrome_options)

browser.get('http://httpbin.org/get')

#PhantomJS,代理设置方法可以借助service_args 参数,也就是命令行参数。

# 我们只需要使用service_args 参数,将命令行的一些参数定义为列表,在初始化的时候传递给PhantomJS 对象即可。

#不推荐,推荐使用headless

from selenium import webdriver

service_args = [

    '--proxy = 127.0.0.1:9743',

    '--proxy-type = http'

]

browser = webdriver.PhantomJS(executable_path='E:\\tools\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe' ,service_args=service_args)

browser.get('http://httpbin.org/get')

print(browser.page_source)

#如果需要认证,那么只需要再加入--proxy-auth选项即可

service_args = []

    '--proxy = 127.0.0.1:9743',

    '--proxy-type = http',

    '--proxy-auth = username:password'

]

f9219207703cff14a572a44e73e55da7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值