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输出一个杨辉三角的例子
Jun 13 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
Python输出各行命令详解
Feb 01 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
python实现图像拼接功能
Mar 23 Python
Python 制作查询商品历史价格的小工具
Oct 20 Python
python 如何用terminal输入参数
May 25 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
Javascript的构造函数和constructor属性
2010/01/09 Javascript
js DOM的学习笔记
2011/12/22 Javascript
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
js计算文本框输入的字符数
2015/10/23 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
JavaScript的继承实现小结
2017/05/07 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
详解Python Socket网络编程
2016/01/05 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
员工考核管理制度
2014/02/02 职场文书
大家访活动实施方案
2014/03/10 职场文书
纪律教育月活动总结
2014/08/26 职场文书
化工实习心得体会
2014/09/09 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js