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模块restful使用方法实例
Dec 10 Python
python实现的多线程端口扫描功能示例
Jan 21 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
python实现周期方波信号频谱图
Jul 21 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
python实现支付宝转账接口
May 07 Python
Python何时应该使用Lambda函数
Jul 02 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
Anaconda的安装及其环境变量的配置详解
Apr 22 Python
python实现图片素描效果
Sep 26 Python
Python中Selenium模块的使用详解
Oct 09 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
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
使用php重新实现PHP脚本引擎内置函数
2007/03/06 PHP
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
Add Formatted Text to a Word Document
2007/06/15 Javascript
项目实践之javascript技巧
2007/12/06 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
JQuery之focus函数使用介绍
2013/08/20 Javascript
Javascript window对象详解
2014/11/12 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
Python微信库:itchat的用法详解
2017/08/14 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
python制作填词游戏步骤详解
2019/05/05 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
介绍一下游标
2012/01/10 面试题
法院四风对照检查材料思想汇报
2014/10/06 职场文书
小学运动会入场词
2015/07/18 职场文书
2016新党章学习心得体会
2016/01/15 职场文书