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实现数通设备端口监控示例
Apr 02 Python
零基础写python爬虫之神器正则表达式
Nov 06 Python
20个常用Python运维库和模块
Feb 12 Python
python+selenium实现自动抢票功能实例代码
Nov 23 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
Jan 20 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
pytorch判断是否cuda 判断变量类型方式
Jun 23 Python
Lombok插件安装(IDEA)及配置jar包使用详解
Nov 04 Python
Python读写锁实现实现代码解析
Nov 28 Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 Python
python 如何在测试中使用 Mock
Mar 01 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
XAMPP安装与使用方法详细解析
2013/11/27 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
经验几则 推荐
2006/09/05 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
javascript打印输出json实例
2013/11/11 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
python正则分析nginx的访问日志
2017/01/17 Python
Python 字符串与数字输出方法
2018/07/16 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
自定义django admin model表单提交的例子
2019/08/23 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
幼儿园安全责任书
2014/04/14 职场文书
三万活动总结
2014/04/28 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
2019经典广告词集锦!
2019/07/02 职场文书