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群发邮件实例代码
Jan 03 Python
python判断字符串是否纯数字的方法
Nov 19 Python
Python中super的用法实例
May 28 Python
简单谈谈Python中函数的可变参数
Sep 02 Python
Python爬豆瓣电影实例
Feb 23 Python
tensorflow构建BP神经网络的方法
Mar 12 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
mac下如何将python2.7改为python3
Jul 13 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
django模板结构优化的方法
Feb 28 Python
详解python爬虫系列之初识爬虫
Apr 06 Python
python+selenium小米商城红米K40手机自动抢购的示例代码
Mar 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
php时间不正确的解决方法
2008/04/09 PHP
PHP 数组入门教程小结
2009/05/20 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
python利用装饰器进行运算的实例分析
2015/08/04 Python
python生成验证码图片代码分享
2016/01/28 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
详解numpy的argmax的具体使用
2019/05/27 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
深入浅析python的第三方库pandas
2020/02/13 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
雷锋精神演讲稿
2014/05/13 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
python 单机五子棋对战游戏
2022/04/28 Python