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实现从百度API获取天气的方法
Mar 11 Python
Python算术运算符实例详解
May 31 Python
Python if语句知识点用法总结
Jun 10 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
Jun 26 Python
Django Form 实时从数据库中获取数据的操作方法
Jul 25 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
python中删除某个元素的方法解析
Nov 05 Python
基于h5py的使用及数据封装代码
Dec 26 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
Python多重继承之菱形继承的实例详解
Feb 12 Python
Python列表如何更新值
May 27 Python
python opencv肤色检测的实现示例
Dec 21 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正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
如何编写jquery插件
2017/03/29 jQuery
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
Python函数式编程
2017/07/20 Python
Python变量类型知识点总结
2019/02/18 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
大学系主任推荐信范文
2013/12/24 职场文书
小学生自我评价范文
2014/01/25 职场文书
主持词开场白
2014/03/17 职场文书
学习演讲稿范文
2014/05/10 职场文书
网络营销计划
2015/01/17 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs