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 队列详解及实例代码
Oct 18 Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 Python
一份python入门应该看的学习资料
Apr 11 Python
Python实现简单石头剪刀布游戏
Jan 20 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 Python
浅谈Pandas Series 和 Numpy array中的相同点
Jun 28 Python
Django结合ajax进行页面实时更新的例子
Aug 12 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
python自动化办公操作PPT的实现
Feb 05 Python
python非标准时间的转换
Jul 25 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
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
JsRender实用入门教程
2014/10/31 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
详解AngularJS 模态对话框
2016/04/07 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
详解javascript中的Error对象
2019/04/25 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
python3.x 将byte转成字符串的方法
2018/07/17 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
骨干教师培训制度
2014/01/13 职场文书
校长先进事迹材料
2014/02/01 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
OpenCV-Python实现油画效果的实例
2021/06/08 Python
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL