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实现二分查找算法实例
May 26 Python
python 性能优化方法小结
Mar 31 Python
python购物车程序简单代码
Apr 18 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
django使用LDAP验证的方法示例
Dec 10 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
深入理解Python异常处理的哲学
Feb 01 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
Apr 02 Python
简单了解Django项目应用创建过程
Jul 06 Python
Python Opencv图像处理基本操作代码详解
Aug 31 Python
Python可视化神器pyecharts之绘制箱形图
Jul 07 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中IP地址与整型数字互相转换详解
2014/08/20 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
学习ExtJS Column布局
2009/10/08 Javascript
js parseInt("08")未指定进位制问题
2010/06/19 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
python2.7实现爬虫网页数据
2018/05/25 Python
Python返回数组/List长度的实例
2018/06/23 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
python实现图像拼接功能
2020/03/23 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
职业规划书如何设计?
2014/01/09 职场文书
考试退步检讨书
2014/01/15 职场文书
个人投资计划书
2014/05/01 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
微信小程序实现聊天室功能
2021/06/14 Javascript