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 相关文章推荐
pyqt4教程之messagebox使用示例分享
Mar 07 Python
python如何实现excel数据添加到mongodb
Jul 30 Python
Python之Web框架Django项目搭建全过程
May 02 Python
Python实现动态加载模块、类、函数的方法分析
Jul 18 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
Python/ArcPy遍历指定目录中的MDB文件方法
Oct 27 Python
python实现坦克大战游戏 附详细注释
Mar 27 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
python实现从ftp服务器下载文件
Mar 03 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
pycharm全局搜索的具体步骤
Jul 28 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 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 array_intersect()函数使用代码
2009/01/14 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
使用prototype.js进行异步操作
2007/02/07 Javascript
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
2016/01/22 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
js的新生代垃圾回收知识点总结
2019/08/22 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
Python 实现自动获取种子磁力链接方式
2020/01/16 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
全球在线商店:BerryLook
2019/04/14 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
外贸员简历中的自我评价
2014/03/04 职场文书
委托公证书样本
2015/01/23 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
幸福终点站观后感
2015/06/04 职场文书
学生退学证明
2015/06/23 职场文书
学前教育见习总结
2015/06/23 职场文书
Java基础之this关键字的使用
2021/06/30 Java/Android
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang