Python爬虫使用代理IP的实现


Posted in Python onOctober 27, 2019

使用爬虫时,如果目标网站对访问的速度或次数要求较高,那么你的 IP 就很容易被封掉,也就意味着在一段时间内无法再进行下一步的工作。这时候代理 IP 能够给我们带来很大的便利,不管网站怎么封,只要能找到一个新的代理 IP 就可以继续进行下一步的研究。

目前很多网站都提供了一些免费的代理 IP 供我们使用,当然付费的会更好用一点。本文除了展示怎样使用代理 IP,也正好体验一下前面文章中搭建的代理 IP 池,不知道的可以点击这里:Python搭建代理IP池(一)- 获取 IP。只要访问代理池提供的接口就可以获取到代理 IP 了,接下来就看怎样使用吧!

测试的网址是:http://httpbin.org/get,访问该站点可以得到请求的一些相关信息,其中 origin 字段就是客户端的 IP,根据它来判断代理是否设置成功,也就是是否成功伪装了IP

获取 IP

代理池使用 Flask 提供了获取的接口:http://localhost:5555/random

只要访问这个接口再返回内容就可以拿到 IP 了

Urllib

先看一下 Urllib 的代理设置方法:

from urllib.error import URLError
import urllib.request
from urllib.request import ProxyHandler, build_opener

# 获取IP
ip_response = urllib.request.urlopen("http://localhost:5555/random")
ip = ip_response.read().decode('utf-8')

proxy_handler = ProxyHandler({
  'http': 'http://' + ip,
  'https': 'https://' + ip
})
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",
  "Host": "httpbin.org",
  "User-Agent": "Python-urllib/3.7"
 },
 "origin": "108.61.201.231, 108.61.201.231",
 "url": "https://httpbin.org/get"
}

Urllib 使用 ProxyHandler 设置代理,参数是字典类型,键名为协议类型,键值是代理,代理前面需要加上协议,即 http 或 https,当请求的链接是 http 协议的时候,它会调用 http 代理,当请求的链接是 https 协议的时候,它会调用https代理,所以此处生效的代理是:http://108.61.201.231 和 https://108.61.201.231

ProxyHandler 对象创建之后,再利用 build_opener() 方法传入该对象来创建一个 Opener,这样就相当于此 Opener 已经设置好代理了,直接调用它的 open() 方法即可使用此代理访问链接

Requests

Requests 的代理设置只需要传入 proxies 参数:

import requests

# 获取IP
ip_response = requests.get("http://localhost:5555/random")
ip = ip_response.text

proxies = {
  'http': 'http://' + ip,
  'https': 'https://' + ip,
}
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",
  "Host": "httpbin.org",
  "User-Agent": "python-requests/2.21.0"
 },
 "origin": "47.90.28.54, 47.90.28.54",
 "url": "https://httpbin.org/get"
}

Requests 只需要构造代理字典然后通过 proxies 参数即可设置代理,比较简单

Selenium

import requests
from selenium import webdriver
import time

# 借助requests库获取IP
ip_response = requests.get("http://localhost:5555/random")
ip = ip_response.text

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://' + ip)
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get('http://httpbin.org/get')
time.sleep(5)

运行结果:

Python爬虫使用代理IP的实现

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的Django框架中settings文件的部署建议
May 30 Python
python daemon守护进程实现
Aug 27 Python
Python操作MongoDB详解及实例
May 18 Python
Python 自动化表单提交实例代码
Jun 08 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
Aug 03 Python
在python中bool函数的取值方法
Nov 01 Python
python 获取一个值在某个区间的指定倍数的值方法
Nov 12 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
学python最电脑配置有要求么
Jul 05 Python
粗暴解决CUDA out of memory的问题
May 22 Python
Python搭建代理IP池实现接口设置与整体调度
Oct 27 #Python
Python搭建代理IP池实现检测IP的方法
Oct 27 #Python
浅析使用Python搭建http服务器
Oct 27 #Python
Python搭建代理IP池实现存储IP的方法
Oct 27 #Python
Python搭建代理IP池实现获取IP的方法
Oct 27 #Python
详解python statistics模块及函数用法
Oct 27 #Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 #Python
You might like
php 不同编码下的字符串长度区分
2009/09/26 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
nvm、nrm、npm 安装和使用详解(小结)
2019/01/17 Javascript
详细探究Python中的字典容器
2015/04/14 Python
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
python中zip()方法应用实例分析
2016/04/16 Python
Python谱减法语音降噪实例
2019/12/18 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
荣耀商城:HIHONOR
2020/11/03 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
经典的毕业生自荐信范文
2014/04/14 职场文书
小学生手册家长评语
2014/04/16 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
技术转让协议书
2016/03/19 职场文书
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS