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实例一个类背后发生了什么
Feb 09 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
PyTorch学习笔记之回归实战
May 28 Python
用python生成1000个txt文件的方法
Oct 25 Python
flask-restful使用总结
Dec 04 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
使用Python脚本zabbix自定义key监控oracle连接状态
Aug 28 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
Python如何脚本过滤文件中的注释
May 27 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 Python
Python爬虫后获取重定向url的两种方法
Jan 19 Python
Python实现视频中添加音频工具详解
Dec 06 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程序?
2006/12/08 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
php编程每天必学之验证码
2016/03/03 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
python 元组的使用方法
2020/06/09 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
计算机专业个人求职自荐信
2013/09/21 职场文书
银行职员思想汇报
2013/12/31 职场文书
教师演讲稿范文
2014/01/08 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
志愿者活动总结范文
2014/04/26 职场文书
信息技术课后反思
2014/04/27 职场文书
片区教研活动总结
2014/07/02 职场文书
学校献爱心活动总结
2014/07/08 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
大学同学聚会感言
2015/07/30 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书