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中使用中文的方法
Feb 19 Python
Python中使用ConfigParser解析ini配置文件实例
Aug 30 Python
python删除服务器文件代码示例
Feb 09 Python
使用Python的toolz库开始函数式编程的方法
Nov 15 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
Django中提示消息messages的设置方式
Nov 15 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
使用python检查yaml配置文件是否符合要求
Apr 09 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
python opencv肤色检测的实现示例
Dec 21 Python
Python Django ORM连表正反操作技巧
Jun 13 Python
Python实现猜拳与猜数字游戏的方法详解
Apr 06 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
天津市收音机工业发展史
2021/03/04 无线电
php实现mysql数据库备份类
2008/03/20 PHP
Snoopy类使用小例子
2008/04/15 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
php 广告调用类代码(支持Flash调用)
2011/08/11 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
php和html的区别点详细总结
2019/09/24 PHP
28个JS验证函数收集
2010/03/02 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
node.js发送邮件email的方法详解
2017/01/06 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
总裁助理岗位职责
2014/02/17 职场文书
《口技》教学反思
2014/02/21 职场文书
我们的节日清明节活动方案
2014/03/05 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers