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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
python optparse模块使用实例
Apr 09 Python
Python中for循环和while循环的基本使用方法
Aug 21 Python
Python命令启动Web服务器实例详解
Feb 23 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
Jun 09 Python
Python 生成 -1~1 之间的随机数矩阵方法
Aug 04 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
Jun 19 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
python名片管理系统开发
Jun 18 Python
python如何删除列为空的行
Jul 17 Python
python 判断字符串当中是否包含字符(str.contain)
Jun 01 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
PHP发送AT指令实例代码
2016/05/26 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
关于JavaScript的一些看法
2009/05/27 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
vue 中swiper的使用教程
2018/05/22 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
Python项目跨域问题解决方案
2020/06/22 Python
Python实现简单猜数字游戏
2021/02/03 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
中学生学习生活的自我评价
2013/10/26 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
倡议书格式
2014/08/30 职场文书