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实现超简单端口转发的方法
Mar 13 Python
通过数据库对Django进行删除字段和删除模型的操作
Jul 21 Python
python3+mysql查询数据并通过邮件群发excel附件
Feb 24 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
Python自动抢红包教程详解
Jun 11 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
关于numpy数组轴的使用详解
Dec 05 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
浅谈python锁与死锁问题
Aug 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
PHP代码优化之成员变量获取速度对比
2014/02/28 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
react实现菜单权限控制的方法
2017/12/11 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
vue router 配置路由的方法
2018/07/26 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
django中使用POST方法获取POST数据
2019/08/20 Python
python文字转语音的实例代码分析
2019/11/12 Python
python通过opencv实现图片裁剪原理解析
2020/01/19 Python
基于Python爬取爱奇艺资源过程解析
2020/03/02 Python
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
速比涛英国官网:Speedo英国
2019/07/15 全球购物
华为c/c++笔试题
2016/01/25 面试题
大学生如何写自荐信
2014/01/08 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
个人简历自荐信
2014/06/26 职场文书
教师节随笔
2015/08/15 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
go设置多个GOPATH的方式
2021/05/05 Golang