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性能优化的20条建议
Oct 25 Python
python多线程用法实例详解
Jan 15 Python
Python中用于检查英文字母大写的isupper()方法
May 19 Python
python关键字and和or用法实例
May 28 Python
python实现车牌识别的示例代码
Aug 05 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
Feb 04 Python
keras多显卡训练方式
Jun 10 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
Django debug为True时,css加载失败的解决方案
Apr 24 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和网页显示乱码解决方法集锦
2008/03/27 PHP
PHP 采集程序中常用的函数
2009/12/09 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
js arguments对象应用介绍
2012/11/28 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
百度地图api如何使用
2015/08/03 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
layui分页效果实现代码
2017/05/19 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
印尼旅游网站:via
2017/11/12 全球购物
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
保密普查工作实施方案
2014/02/25 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
入党政审材料范文
2014/12/24 职场文书
小升初自荐信范文
2015/03/05 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
新学期家长寄语2016
2015/12/03 职场文书
小学三年级语文教学反思
2016/03/03 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android