Python爬虫设置代理IP的方法(爬虫技巧)


Posted in Python onMarch 04, 2018

在学习Python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,这里讲述一个爬虫技巧,设置代理IP。

(一)配置环境

  • 安装requests库
  • 安装bs4库
  • 安装lxml库

(二)代码展示

# IP地址取自国内?匿代理IP网站:http://www.xicidaili.com/nn/
# 仅仅爬取首页IP地址就足够一般使用
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; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
  }
  ip_list = get_ip_list(url, headers=headers)
  proxies = get_random_ip(ip_list)
  print(proxies)函数get_ip_list(url, headers)传入url和headers,最后返回一个IP列表,列表的元素类似42.84.226.65:8888格式,这个列表包括国内?匿代理IP网站首页所有IP地址和端口。

函数get_random_ip(ip_list)传入第一个函数得到的列表,返回一个随机的proxies,这个proxies可以传入到requests的get方法中,这样就可以做到每次运行都使用不同的IP访问被爬取的网站,有效地避免了真实IP被封的风险。proxies的格式是一个字典:{‘http': ‘http://42.84.226.65:8888‘}

(三)代理IP的使用

运行上面的代码会得到一个随机的proxies,把它直接传入requests的get方法中即可。

web_data = requests.get(url, headers=headers, proxies=proxies)

总结

以上所述是小编给大家介绍的Python爬虫设置代理IP的方法(爬虫技巧),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
python中is与双等于号“==”的区别示例详解
Nov 21 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
python实现的读取网页并分词功能示例
Oct 29 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
Python datetime 格式化 明天,昨天实例
Mar 02 Python
Python unittest框架操作实例解析
Apr 13 Python
python三引号如何输入
Jul 06 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
浅析python实现scrapy定时执行爬虫
Mar 04 #Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Mar 04 #Python
Python爬虫框架Scrapy实例代码
Mar 04 #Python
详解python中asyncio模块
Mar 03 #Python
python3.6+django2.0开发一套学员管理系统
Mar 03 #Python
python爬虫面试宝典(常见问题)
Mar 02 #Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 #Python
You might like
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
FLASH 广告之外的链接
2008/12/16 Javascript
jquery中:input和input的区别分析
2011/07/13 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
Vue.js的模板语法详解
2020/02/16 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
Python os.access()用法实例
2019/02/18 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
构建高效的python requests长连接池详解
2020/05/02 Python
python轮询机制控制led实例
2020/05/03 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
中间件分为哪几类
2012/03/14 面试题
学术会议欢迎词
2014/01/09 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
求职教师自荐书
2014/06/19 职场文书
授权委托书样本
2014/09/25 职场文书
房屋授权委托书范本
2014/10/07 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书