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 re模块findall()函数实例解析
Jan 19 Python
python3爬取各类天气信息
Feb 24 Python
解决pip install的时候报错timed out的问题
Jun 12 Python
python3.4爬虫demo
Jan 22 Python
详解Python中的内建函数,可迭代对象,迭代器
Apr 29 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
Jul 15 Python
Python符号计算之实现函数极限的方法
Jul 15 Python
Python产生一个数值范围内的不重复的随机数的实现方法
Aug 21 Python
pytorch制作自己的LMDB数据操作示例
Dec 18 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
Python特殊属性property原理及使用方法解析
Oct 09 Python
Python 内存管理机制全面分析
Jan 16 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/10/09 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
详解PHP PDO简单教程
2019/05/28 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
HTML5附件拖拽上传drop & google.gears实现代码
2011/04/28 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
python 利用toapi库自动生成api
2020/10/19 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
网站设计师的岗位职责
2013/11/21 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
租房协议书
2014/04/10 职场文书
程序员求职信
2014/04/16 职场文书
推广活动策划方案
2014/08/23 职场文书
公司演讲稿开场白
2014/08/25 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python