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 09 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
R vs. Python 数据分析中谁与争锋?
Oct 18 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
python 发送json数据操作实例分析
Oct 15 Python
Python Celery多队列配置代码实例
Nov 22 Python
如何搭建pytorch环境的方法步骤
May 06 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
Dec 09 Python
详解Python内置模块Collections
Mar 22 Python
python 单机五子棋对战游戏
Apr 28 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
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
javascript 常用功能总结
2012/03/18 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
关于vue中 $emit的用法详解
2018/04/12 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
js实现简单的秒表
2020/01/16 Javascript
JavaScript鼠标拖拽事件详解
2020/04/03 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
python检查URL是否正常访问的小技巧
2017/02/25 Python
Python通过future处理并发问题
2017/10/17 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
Python调用C语言程序方法解析
2020/07/07 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
自我鉴定书面格式
2014/01/13 职场文书
小学校园活动策划
2014/01/30 职场文书
运动员获奖感言
2014/08/15 职场文书
职工小家建设活动方案
2014/08/25 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
小学同学聚会感言
2015/07/30 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
Java使用jmeter进行压力测试
2021/07/09 Java/Android
Python语言内置数据类型
2022/02/24 Python
Python实现Hash算法
2022/03/18 Python
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL