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 相关文章推荐
使用httplib模块来制作Python下HTTP客户端的方法
Jun 19 Python
python中map()与zip()操作方法
Feb 27 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
Python实现的选择排序算法示例
Nov 29 Python
python将字典内容存入mysql实例代码
Jan 18 Python
python指定写入文件时的编码格式方法
Jun 07 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
python print出共轭复数的方法详解
Jun 25 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
python中几种自动微分库解析
Aug 29 Python
python操作链表的示例代码
Sep 27 Python
Python装饰器的练习题
Nov 23 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中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
js将json格式内容转换成对象的方法
2013/11/01 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
2016/06/10 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
Python pass 语句使用示例
2014/03/11 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
Django app配置多个数据库代码实例
2019/12/17 Python
python模拟实现分发扑克牌
2020/04/22 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
如何用python批量调整视频声音
2020/12/22 Python
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
禁止高声喧哗的标语
2014/06/11 职场文书
经典毕业生求职信
2014/07/12 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
家庭经济困难证明
2015/06/23 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
Mysql 一主多从的部署
2022/05/20 MySQL