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及Django框架生成二维码的方法分析
Jan 31 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
Python常见的pandas用法demo示例
Mar 16 Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 Python
python实现小世界网络生成
Nov 21 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
python collections模块的使用
Oct 16 Python
python request 模块详细介绍
Nov 10 Python
scrapy头部修改的方法详解
Dec 06 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
使用 php4 加速 web 传输
2006/10/09 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
Symfony生成二维码的方法
2016/02/04 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
Jquery遍历checkbox获取选中项value值的方法
2014/02/13 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
flask框架路由常用定义方式总结
2019/07/23 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
Python flask框架端口失效解决方案
2020/06/04 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
实习自我评价怎么写
2013/12/02 职场文书
银行优秀员工事迹
2014/02/06 职场文书
如何写自我鉴定
2014/03/19 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL