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 11 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
python 将有序数组转换为二叉树的方法
Mar 26 Python
PyQt5显示GIF图片的方法
Jun 17 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
Python如何读取文件中图片格式
Jan 13 Python
python+Selenium自动化测试——输入,点击操作
Mar 06 Python
树莓派升级python的具体步骤
Jul 05 Python
python中watchdog文件监控与检测上传功能
Oct 30 Python
django注册用邮箱发送验证码的实现
Apr 18 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
详解Python中DOM方法的动态性
2015/04/11 Python
Python利用ansible分发处理任务
2015/08/04 Python
python数据结构之链表的实例讲解
2017/07/25 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
keras中的卷积层&池化层的用法
2020/05/22 Python
Python之字典对象的几种创建方法
2020/09/30 Python
Django URL参数Template反向解析
2020/11/24 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
统计岗位职责
2014/02/21 职场文书
新党章的学习心得体会
2014/11/07 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
2015年人事科工作总结
2015/04/28 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
小学英语听课心得体会
2016/01/14 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
Pytorch可视化的几种实现方法
2021/06/10 Python
Python学习之时间包使用教程详解
2022/03/21 Python