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的爬虫程序编写框架Scrapy入门学习教程
Jul 02 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
Python日期的加减等操作的示例
Aug 15 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
Django REST framework视图的用法
Jan 16 Python
Python高级特性与几种函数的讲解
Mar 08 Python
python、Matlab求定积分的实现
Nov 20 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
IDLE下Python文件编辑和运行操作
Apr 25 Python
Python中的全局变量如何理解
Jun 04 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
js相册效果代码(点击创建即可)
2013/04/16 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
通俗易懂地解释JS中的闭包
2017/10/23 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
python写的ARP攻击代码实例
2014/06/04 Python
python海龟绘图实例教程
2014/07/24 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
Python更新所有已安装包的操作
2020/02/13 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
安全生产专项整治方案
2014/05/06 职场文书
路政管理求职信
2014/06/18 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
工程索赔意向书
2014/08/30 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
先进班组材料范文
2014/12/25 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
mysqldump进行数据备份详解
2022/07/15 MySQL
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python