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中的array数组模块相关使用
Jul 05 Python
Python实现完整的事务操作示例
Jun 20 Python
python3调用R的示例代码
Feb 23 Python
python实现读Excel写入.txt的方法
Apr 29 Python
python3中的md5加密实例
May 29 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
python高斯分布概率密度函数的使用详解
Jul 10 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 Python
如何在python中判断变量的类型
Jul 29 Python
教你用python控制安卓手机
May 13 Python
Python 实现Mac 屏幕截图详解
Oct 05 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脚本数据库功能详解(中)
2006/10/09 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
Yii全局函数用法示例
2017/01/22 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
JS 常用校验函数
2009/03/26 Javascript
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
详解mpvue开发小程序小总结
2018/07/25 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
js实现时间日期校验
2020/05/26 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
Windows下安装python2和python3多版本教程
2017/03/30 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
python实现神经网络感知器算法
2017/12/20 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
数字漫画:comiXology
2020/06/13 全球购物
建筑工程实习自我鉴定
2013/09/19 职场文书
临床医师专业个人自我评价范文
2013/11/07 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
任命书格式模板
2015/09/22 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang