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之dict()的操作方法
Sep 24 Python
用python实现面向对像的ASP程序实例
Nov 10 Python
python实现的DES加密算法和3DES加密算法实例
Jun 03 Python
python版本的读写锁操作方法
Apr 25 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
Numpy数组的保存与读取方法
Apr 04 Python
使用python将时间转换为指定的格式方法
Nov 12 Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 Python
Django REST framework 视图和路由详解
Jul 19 Python
Python 硬币兑换问题
Jul 29 Python
python 基于UDP协议套接字通信的实现
Jan 22 Python
python实现自动清理文件夹旧文件
May 10 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使用DES进行加密与解密的方法详解
2013/06/06 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
php的debug相关函数用法示例
2016/07/11 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
javascript 文档的编码问题解决
2009/03/01 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
python paramiko实现ssh远程访问的方法
2013/12/03 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
ASP.NET Core中的配置详解
2021/02/05 Python
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
遇到的Mysql的面试题
2014/06/29 面试题
应用艺术专业个人的自我评价
2014/01/03 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
十佳护士先进事迹
2014/05/08 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
运动会拉拉队口号
2014/06/09 职场文书
医院见习报告范文
2014/11/03 职场文书
实习单位指导教师评语
2014/12/30 职场文书
2015年政务公开工作总结
2015/05/19 职场文书