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爬虫之爬虫的定义及URL构成
Nov 04 Python
python实现字符串和日期相互转换的方法
May 13 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
在Windows中设置Python环境变量的实例讲解
Apr 28 Python
python调用百度REST API实现语音识别
Aug 30 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
python使用KNN算法识别手写数字
Apr 25 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 Python
基于python实现MQTT发布订阅过程原理解析
Jul 27 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
python实现计算器简易版
Dec 17 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
优化Python代码使其加快作用域内的查找
2015/03/30 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
python实现zabbix发送短信脚本
2018/09/17 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
python队列Queue的详解
2019/05/10 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
2020/04/16 Python
js实现弹框效果
2021/03/24 Javascript
小加工厂管理制度
2014/01/21 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
活动总结的格式
2014/05/07 职场文书
婚前协议书范本两则
2014/10/16 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
检讨书格式
2019/04/25 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang
基于Python编写一个监控CPU的应用系统
2022/06/25 Python