第二十六节:urllib、requests、selenium请求库代理设置
1、urllib代理设置
1 from urllib.error import URLError
2 from urllib.request import ProxyHandler
3 from urllib.request import build_opener
4
5 # 通过ProxyHandler来设置代理服务器,参数为字典类型,键名为协议,键值为代理
6 proxy_handler = ProxyHandler({"http": "http://113.120.33.75:9999",
7 "https":"https://120.83.99.72:9999"})
8
9 # 创建一个opener对象,比openurl多了一个header
10 opener = build_opener(proxy_handler)
11 try:
12 # 通过opener对象打开url
13 response = opener.open("http://httpbin.org/get")
14 print(response.read().decode("utf-8"))
15 except URLError as e:
16 print(e.reason)
结果会出现两种情况
[WinError 10061] 由于目标计算机积极拒绝,无法连接。
解决方法:主要是代理不可用,更换代理就行
[WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
解决方法:将浏览器的代理设置中的局域网设置,里面的自动配置脚本选项改为自动检测设置即可。



运行结果如下,可以看到origin已经改成了代理IP
{
  "args": {},
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Host": "httpbin.org",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
  },
  "origin": "113.120.33.75, 113.120.33.75",
  "url": "https://httpbin.org/get"
}
2、requests代理设置
1 import requests
2
3 # 设置代理
4 proxies = {"http":"http://182.92.113.183:8118",
5 "https":"https://120.83.99.72:9999"}
6 try:
7 # 请求url链接
8 response = requests.get("http://httpbin.org/get",proxies=proxies)
9
10 # 输出文本内容
11 print(response.text)
12 except requests.exceptions.ConnectionError as e:
13 print(e.args)
运行结果如下,origin已经更改为代理IP了,显然比urllib简单多了,且不用创建opener对象
{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.21.0"
  },
  "origin": "182.92.113.183, 182.92.113.183",
  "url": "https://httpbin.org/get"
}
3、selenium代理设置
1 import time
2 from selenium import webdriver
3
4 # 代理IP地址
5 proxy = "182.92.113.183:8118"
6
7 # url链接
8 url = "http://httpbin.org/get"
9
10 # 启动谷歌控制选项,以便添加代理
11 chrom_options = webdriver.ChromeOptions()
12
13 # 设置代理,注意“=”号两边不能有空格
14 chrom_options.add_argument("--proxy-server=http://" + proxy)
15
16 # 模拟谷歌浏览器,并通过chrome_options参数传递代理
17 browser = webdriver.Chrome(executable_path="D:\chromedriver.exe",chrome_options=chrom_options)
18
19 # 打开url链接
20 browser.get(url=url)
21 time.sleep(10)
22
23 # 退出并清除浏览器缓存
24 browser.quit()
运行结果如下,可以看到origin已经更改为代理IP了
{
  "args": {},
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Host": "httpbin.org",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
  },
  "origin": "182.92.113.183, 182.92.113.183",
  "url": "https://httpbin.org/get"
}
4、PhantomJS代理设置(新版本selenium已经弃用,使用谷歌无界面浏览器)
from selenium import webdriver
"""service_args = [
‘--proxy=%s‘ % ip_html, # 代理 IP:prot (eg:192.168.0.28:808)
‘--proxy-type=http’, # 代理类型:http/https
‘--load-images=no’, # 关闭图片加载(可选)
‘--disk-cache=yes’, # 开启缓存(可选)
‘--ignore-ssl-errors=true’ # 忽略https错误(可选)
]"""
# url链接
url = "http://httpbin.org/get"
service_args = ["--proxy=121.233.206.44:9999", # 代理IP
"--proxy-type=http"] # 代理协议类型http/HTTPS # 启用PhantomJS无界面浏览器,并传递参数为代理IP
browser = webdriver.PhantomJS(executable_path=r"D:\phantomjs-2.1.1-windows\bin\phantomjs.exe",service_args=service_args)
browser.get(url=url)
print(browser.page_source)
运行结果出乎意料的是最新版本的selenium不在支持PhantomJS了,让我们使用谷歌或者火狐的无头浏览器
UserWarning: Selenium support for PhantomJS has been deprecated,
please use headless versions of Chrome or Firefox instead
warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
由于我的浏览器是谷歌浏览器,所以我就使用谷歌的无头浏览器进行IP代理,
from selenium import webdriver
from selenium.webdriver.chrome.options import Options # 创建谷歌浏览器模拟设置对象
chrome_options = Options()
proxy = "182.92.113.183:8118" # 代理IP
url = "http://httpbin.org/get" # url链接 # 设置谷歌浏览器无界面模式,即浏览器不停可视化页面
chrome_options.add_argument("--headless") # 禁用使用GPU加速
chrome_options.add_argument("--disable-gpu") # 设置语言
chrome_options.add_argument("-lang=zh-cn") # 中文
# chrome_options.add_argument("-lang=en-GB") # 英文 # 设置谷歌浏览器代理IP
chrome_options.add_argument("--proxy-server=http://" + proxy) # 指定浏览器分辨率
chrome_options.add_argument("window-size=1920x3000") # 模拟谷歌浏览器,并通过chrome_options参数传递代理IP
browser = webdriver.Chrome(chrome_options=chrome_options,executable_path="D:\chromedriver.exe")
browser.get(url=url)
print(browser.find_element_by_xpath("/html/body/pre").text)
运行结果如下,origin的IP地址已经更改为代理IP
{
  "args": {},
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-cn",
    "Host": "httpbin.org",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/74.0.3729.169 Safari/537.36"
  },
  "origin": "182.92.113.183, 182.92.113.183",
  "url": "https://httpbin.org/get"
}
最后附上selenium模块add_argument常用参数
chrome_options.add_argument('--user-agent=""')                  # 设置请求头的User-Agent
chrome_options.add_argument('--window-size=1280x1024')          # 设置浏览器分辨率(窗口大小)
chrome_options.add_argument('--start-maximized')                # 最大化运行(全屏窗口),不设置,取元素会报错
chrome_options.add_argument('--disable-infobars')               # 禁用浏览器正在被自动化程序控制的提示
chrome_options.add_argument('--incognito')                      # 隐身模式(无痕模式)
chrome_options.add_argument('--hide-scrollbars')                # 隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('--disable-javascript')             # 禁用javascript
chrome_options.add_argument('--blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
chrome_options.add_argument('--headless')                       # 浏览器不提供可视化页面
chrome_options.add_argument('--ignore-certificate-errors')      # 禁用扩展插件并实现窗口最大化
chrome_options.add_argument('--disable-gpu')                    # 禁用GPU加速
chrome_options.add_argument('--disable-software-rasterizer')
chrome_options.add_argument('--disable-extensions')             # 禁止扩展
chrome_options.add_argument('--start-maximized')                # 启动就最大化
chrome_options.add_argument("--proxy-server=http://xxxxxxx")    # 设置IP代理
另外还有其他参数,请参考https://blog.csdn.net/liaojianqiu0115/article/details/78353267
第二十六节:urllib、requests、selenium请求库代理设置的更多相关文章
- 大白话5分钟带你走进人工智能-第二十六节决策树系列之Cart回归树及其参数(5)
		
第二十六节决策树系列之Cart回归树及其参数(5) 上一节我们讲了不同的决策树对应的计算纯度的计算方法, ...
 - 风炫安全WEB安全学习第二十六节课  XSS常见绕过防御技巧
		
风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧 XSS绕过-过滤-编码 核心思想 后台过滤了特殊字符,比如说
 - 第二十六节,滑动窗口和 Bounding Box 预测
		
上节,我们学习了如何通过卷积网络实现滑动窗口对象检测算法,但效率很低.这节我们讲讲如何在卷积层上应用这个算法. 为了构建滑动窗口的卷积应用,首先要知道如何把神经网络的全连接层转化成卷积层.我们先讲解这 ...
 - 第二十六节,Python内置函数
		
Python3.0内置函数 abs() 取数字的绝对值,也就是无论是正数还是负数取它的绝对值格式:abs(目标变量)返回:数字类型 #!/usr/bin/env python # -*- coding ...
 - [EXTJS5学习笔记]第二十六节 在eclipse/myeclipse中使用sencha extjs的插件
		
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40507383 插件下载: http://download.csdn.net/detai ...
 - 【php增删改查实例】第二十六节 - 个人详情页制作
		
在一般的系统中,当用户点击头像的时候,就会跳转到对应的个人详情页,在这个页面,他可以查看和修改自己的个人信息,或者更换头像. 本案例中,个人详情页使用bootstrap框架. 首先,我们新建一个htm ...
 - 第二十六节:复习Java语言基础-Java的概述,匿名对象,封装,构造函数
		
Java基础 Java语言概述 Java语言 语言 描述 javaee 企业版 javase 标准版 javame 小型版 JDK JDK(Java开发工具包) Java语言 语言 Java语言 Ja ...
 - php第二十六节课
		
会话购物车 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
 - 第十六节,使用函数封装库tf.contrib.layers
		
这一节,介绍TensorFlow中的一个封装好的高级库,里面有前面讲过的很多函数的高级封装,使用这个高级库来开发程序将会提高效率. 我们改写第十三节的程序,卷积函数我们使用tf.contrib.lay ...
 - 第一百三十六节,JavaScript,封装库--事件绑定
		
JavaScript,封装库--事件绑定 在函数库添加两个函数 添加事件绑定函数 删除事件绑定函数 添加事件绑定函数 /** addEvent()函数库函数,跨浏览器添加事件绑定,注意:传入事件名称时 ...
 
随机推荐
- 使用KVM的命令行方式安装centos7虚拟机
			
前提条件 1.宿主机上已经安装KVM软件,参考网址:https://www.cnblogs.com/sanduzxcvbnm/p/15538881.html 2.已经上传centos7镜像到宿主机里 ...
 - 6_SSM
			
一. ssm整合 1.1 项目创建 1.1.1 创建Maven项目 创建一个普通的Maven-web项目,名称为ssm 记得勾选上Create from archetype然后选择后缀为maven-a ...
 - 前端三件套 HTML+CSS+JS基础知识内容笔记
			
HTML基础 目录 HTML基础 HTML5标签 doctype 标签 html标签 head标签 meta标签 title标签 body标签 文本和超链接标签 标题标签 段落标签 换行标签 水平标签 ...
 - C++自学笔记  构造与析构;
			
构造与析构 类不是实体:对象属于类:函数属于类 : 用不同的对象调用同一个类里面的函数的时候,函数知道是哪一个对象在调用它 关键字 this this是一个指针 Point a; a.print(); ...
 - 基于Netty的TCP服务框架
			
19年写的一个基础的TCP服务框架,内置了一个简单IOC容器,当时的目标是一方面能作为组件供第三方集成实现TCP通讯相关功能,另一方面作为提供一种服务框架范式.所以框架核心点主要还是通过适度的封装,隐 ...
 - BigDecimal 用法总结
			
转载请注明出处: 目录 1.BigDecimal 简介 2.构造BigDecimal的对象 3.常用方法总结 4.divide方法使用 5.setScale 方法使用 6.BigDecimal 数据库 ...
 - Go_Channel详解
			
一 channel介绍 单纯地将函数并发执行是没有意义的.函数与函数间需要交换数据才能体现并发执行函数的意义. 虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问 ...
 - 【JavaWeb】学习笔记——JSP
			
概念 全称:Java Server Pages, Java服务端页面 描述:一种动态的网页技术,可以在其中定义HTML.JS.CSS等静态内容,以及Java代码的动态内容 说明:JSP = HTML ...
 - nrf9160开机测试(做主控)——连接nrfcloud云
			
由于作者水平有限,如有披漏欢迎指正. 测试流程: 1.前期开发准备(硬件) 2.开发环境准备(软件) 3.连接云 4.GPS测试 一.前期开发准备: nrf9160-DK版 nRF Connect f ...
 - Spring Core rce漏洞分析(CVE-2022-22965)
			
漏洞描述: Springmvc框架参数绑定功能,绑定了请求里的参数造成变量注入,攻击者可以实现任意文件写入,漏洞点spring-beans包中. 漏洞编号: CVE-2022-22965 影响范围: ...