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列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
Python使用Scrapy爬取妹子图
May 28 Python
python检查序列seq是否含有aset中项的方法
Jun 30 Python
python之Character string(实例讲解)
Sep 25 Python
Python 实现一行输入多个值的方法
Apr 21 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
Django Admin后台添加数据库视图过程解析
Apr 01 Python
Keras 使用 Lambda层详解
Jun 10 Python
python中rb含义理解
Jun 18 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 Python
python实现对doc、txt、xls等文档的读写操作
Apr 02 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
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
accesskey 提交
2006/06/26 Javascript
大家未必知道的Js技巧收藏
2008/04/07 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
vue-router单页面路由
2017/06/17 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
Python实现的连接mssql数据库操作示例
2018/08/17 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
python+selenium实现QQ邮箱自动发送功能
2019/01/23 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
Python实现区域填充的示例代码
2021/02/03 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
.NET面试10题
2014/02/24 面试题
支部鉴定材料
2014/06/02 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书