Python爬虫常用小技巧之设置代理IP


Posted in Python onSeptember 13, 2018

设置代理IP的原因

我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站。假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,这样便不会出现因为频繁访问而导致禁止访问的现象。

我们在学习Python爬虫的时候,也经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败。高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,所以下面这篇文章讲述一个爬虫技巧,设置代理IP

这里介绍一下免费获取代理IP的方法,这个方法的优点就是免费,但是缺点就是爬取后存在很多不能用的

IP地址取自国内?匿代理IP网站,西刺代理,我们爬取首页IP地址就足够一般使用,或者你也可以爬取第一页,第二页…的

配置环境

  • 安装requests库
  • 安装bs4库
  • 安装lxml库

具体代码

话不多说直接上代码吧

from bs4 import BeautifulSoup
import requests
import random

def get_ip_list(url, headers):
 web_data = requests.get(url, headers=headers)
 soup = BeautifulSoup(web_data.text, 'lxml')
 ips = soup.find_all('tr')
 ip_list = []
 for i in range(1, len(ips)):
  ip_info = ips[i]
  tds = ip_info.find_all('td')
  ip_list.append(tds[1].text + ':' + tds[2].text)
 return ip_list

def get_random_ip(ip_list):
 proxy_list = []
 for ip in ip_list:
  proxy_list.append('http://' + ip)
 proxy_ip = random.choice(proxy_list)
 proxies = {'http': proxy_ip}
 return proxies

if __name__ == '__main__':
 url = 'http://www.xicidaili.com/nn/'
 headers = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17'
 }
 ip_list = get_ip_list(url, headers=headers)
 proxies = get_random_ip(ip_list)
 print(proxies)

函数get_ip_list(url, headers)传入url和headers,最后返回一个IP列表,列表的元素类似122.114.31.177:808格式,这个列表包括国内?匿代理IP网站首页所有IP地址和端口

函数get_random_ip(ip_list)传入第一个函数得到的列表,返回一个随机的proxies,这个proxies可以传入到requests的get方法中,这样就可以做到每次运行都使用不同的IP访问被爬取的网站,有效地避免了真实IP被封的风险

proxies的格式是一个字典: {‘http': ‘http://122.114.31.177:808‘} ,可以将下面的执行也封装为方法

对于抓取IP这个,西刺代理的服务器做了反爬处理,如果你频繁去抓取的话,服务器会主动返回503错误,提示block,所以在请求的时候可以先一次请求完保存一个文件,来读取这个文件,或者爬取一个ip使用几分钟后,再去爬取一次,相当于加一个定时功能

代理IP的使用

运行上面的代码会得到一个随机的proxies,把它直接传入requests的get方法中即可

res = requests.get(url, headers=headers, proxies=proxies)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python删除过期文件的方法
May 29 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
python如何解析配置文件并应用到项目中
Jun 27 Python
Python3+Appium安装使用教程
Jul 05 Python
Python Numpy库datetime类型的处理详解
Jul 13 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 Python
Python基于requests库爬取网站信息
Mar 02 Python
Python约瑟夫生者死者小游戏实例讲解
Jan 04 Python
Django扫码抽奖平台的配置过程详解
Jan 14 Python
python sleep和wait对比总结
Feb 03 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 #Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 #Python
Python字典创建 遍历 添加等实用基础操作技巧
Sep 13 #Python
python单例模式获取IP代理的方法详解
Sep 13 #Python
如何利用python制作时间戳转换工具详解
Sep 12 #Python
Python get获取页面cookie代码实例
Sep 12 #Python
python读取和保存图片5种方法对比
Sep 12 #Python
You might like
PHP中遍历stdclass object的实现代码
2011/06/09 PHP
php下获取http状态的实现代码
2014/05/09 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
(function($){...})(jQuery)的意思
2010/07/22 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
bootstrap table实例详解
2017/01/06 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
Python 异常处理实例详解
2014/03/12 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
Python给图像添加噪声具体操作
2019/03/03 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
前台文员岗位职责及工作流程
2013/11/19 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
告诉你创业计划书的8个实用技巧
2019/07/12 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers