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中的列表推导浅析
Apr 26 Python
Python编程生成随机用户名及密码的方法示例
May 05 Python
Python实现PS图像调整之对比度调整功能示例
Jan 26 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
Python3实现定时任务的四种方式
Jun 03 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
python3中替换python2中cmp函数的实现
Aug 20 Python
Python实现密钥密码(加解密)实例详解
Apr 26 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
python数字图像处理:图像简单滤波
Jun 28 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
drupal 代码实现URL重写
2011/05/04 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
2018/05/24 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
JS+CSS实现仿msn风格选项卡效果代码
2015/10/22 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
Python Celery多队列配置代码实例
2019/11/22 Python
python创建文本文件的简单方法
2020/08/30 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
如何查找和删除数据库中的重复数据
2014/11/05 面试题
酒店实习个人鉴定
2013/12/07 职场文书
师德演讲稿范文
2014/05/06 职场文书
高中学校对照检查材料
2014/08/31 职场文书
公司离职证明标准样本
2014/10/05 职场文书
优秀高中学生评语
2014/12/30 职场文书
埃及王子观后感
2015/06/16 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
家访教师心得体会
2016/01/23 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers