Python爬虫使用代理IP的实现

使用爬虫时,如果目标网站对访问的速度或次数要求较高,那么你的 IP 就很容易被封掉,也就意味着在一段时间内无法再进行下一步的工作。这时候代理 IP 能够给我们带来很大的便利,不管网站怎么封,只要能找到一个新的代理 IP 就可以继续进行下一步的研究。

目前很多网站都提供了一些免费的代理 IP 供我们使用,当然付费的会更好用一点。本文除了展示怎样使用代理 IP,也正好体验一下前面文章中搭建的代理 IP 池,不知道的可以点击这里:Python搭建代理IP池(一)- 获取 IP。只要访问代理池提供的接口就可以获取到代理 IP 了,接下来就看怎样使用吧!

在这里插入图片描述

API测试网址:http://www.jshk.com.cn/,访问该站点可以得到请求的一些相关信息,其中 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.textproxies = {'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.textchrome_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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/8381.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 TypeScript 中有效地使用 keyof 和 typeof 来表示类型

在本文中,我们将学习如何通过组合类型运算符和枚举来提取和声明常量类型typeof,以使您的代码库得到优化。keyof 先决条件 为了获得更好的编码体验,您应该在 IDE 中安装 TypeScript,例如VSCode。它将为您提供许多基本功能&#xff…

MySQL的基本语法

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于MySQL的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.数据库(建立,查…

备战秋招002(20230704)

文章目录 前言一、今天学习了什么?二、关于问题的答案1.线程池2.synchronized关键字3、volatile 总结 前言 提示:这里为每天自己的学习内容心情总结; Learn By Doing,Now or Never,Writing is organized thinking. …

【网络原理】TCP/IP协议五层模型

🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 本期讲解协议、OSI七层模型、TCP/IP五层模型、网络设备所在的分层、数据的封装和分佣。 目录 …

浏览器绘制图表的 N 种方法 | 可视化

前言 DORAVIS 可视化大屏编辑器,是植根于浏览器的可视化平台。我们不难发现,DORAVIS 的众多图表中,有多种实现方案。如,基于 ECharts 二次开发的 BI 图表,有基于 Mapbox/leaflet 等实现的地理图表,以及根据…

【Flutter 组件】005-基础组件:单选、开关和复选框

【Flutter 组件】005-基础组件:单选、开关和复选框 文章目录 【Flutter 组件】005-基础组件:单选、开关和复选框一、概述二、基本使用1、开关代码示例运行结果 2、复选框代码示例运行结果 3、多个选项单选代码示例运行结果 4、多个选项多选代码示例运行结…

易微联2.4G通断器添加到手机步骤

蓝牙款无WIFI,不用扫码,按住通断器上的按钮,会先闪一下,再闪两下。闪一下的时候连手机,闪两下清码。 手机上打开易微联app,依次点击加号/轻智能遥控器/单按键遥控器/添加完成。 返回打开刚才添加的开关&a…

图像处理--边缘检测算子

算子推导过程 1、知识引入: 在一维连续数集上有函数f(x),我们可以通过求导获得该函数在任一点的斜率,根据导数的定义有: 在二维连续数集上有函数f(x,y),我们也可以通过求导获得该函数在x和y分量的偏导数,根据定义有: …

升级Xcode14.3,项目无法运行解决

报错:link command failed with exit code 1(use -v to see invocaiton) 原因:新版本Xcode删除了特定目录下的一些文件 解决: post_install do |installer|installer.pods_project.targets.each do |target|target.build_configurations.e…

spring源码分析-ApplicationContext----扩展组件event listener

我们知道 spring中的ApplicationContext在beanFactory(提供基础bean处理)基础上增加了扩展组件,例如国际化,资源,发布事件和监听事件,今天主要针对发布和监听事件做一次源码分析,看到底发布和监听是如何实现的&#xf…

【性能工程】性能比较:REST vs gRPC vs 异步通信

微服务之间的通信方式对微服务架构内的各种软件质量因素有重大影响(有关微服务网络内通信的关键作用的更多信息)。沟通方式会影响软件的性能和效率等功能性需求,以及可变性、可扩展性和可维护性等非功能性需求。因此,有必要考虑不…

宝塔Panel搭建Python环境

服务器安装python环境 找到软件商店 应用搜索 输入:python 安装Python项目管理器2.4 开启首页显示 回到首页 找到python管理器并点击进入 安装对应的python版本 到这里 服务器就可以告一段落了 在本地开发服务端应用并上传服务器 将写好的python应用 导出依赖…