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计算圆周长、面积、球体体积并画出圆
Apr 08 Python
Python实例之wxpython中Frame使用方法
Jun 09 Python
python实现根据月份和日期得到星座的方法
Mar 27 Python
python使用wmi模块获取windows下硬盘信息的方法
May 15 Python
python实现在字符串中查找子字符串的方法
Jul 11 Python
Python 关于反射和类的特殊成员方法
Sep 14 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
Python Tornado之跨域请求与Options请求方式
Mar 28 Python
使用 django orm 写 exists 条件过滤实例
May 20 Python
Django Path转换器自定义及正则代码实例
May 29 Python
Python 中的Sympy详细使用
Aug 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中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
2016/04/03 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
Python编程实现正则删除命令功能
2017/08/30 Python
详解用python写一个抽奖程序
2019/05/10 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
新学期校长寄语
2014/01/18 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
总经理检讨书
2014/09/15 职场文书
七年级作文之下雨天
2019/12/23 职场文书
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server