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 08 Python
python读取json文件并将数据插入到mongodb的方法
Mar 23 Python
python集合用法实例分析
May 30 Python
Python数据类型详解(一)字符串
May 08 Python
Python语言描述最大连续子序列和
Dec 05 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
Django对models里的objects的使用详解
Aug 17 Python
Python基于pygame实现单机版五子棋对战
Dec 26 Python
Python中的With语句的使用及原理
Jul 29 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 多维数组排序实现代码
2009/08/05 PHP
PHP如何解决网站大流量与高并发的问题
2011/06/25 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
初学Python实用技巧两则
2014/08/29 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
Python3多线程基础知识点
2019/02/19 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
python实现双人五子棋(终端版)
2020/12/30 Python
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
中班中秋节活动反思
2014/02/18 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
2014年医院工作总结
2014/11/20 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
设置IIS Express并发数
2022/07/07 Servers