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写的贪吃蛇游戏例子
Jun 16 Python
Python常用随机数与随机字符串方法实例
Apr 09 Python
Python的Django框架中的数据库配置指南
Jul 17 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
python二进制文件的转译详解
Jul 03 Python
Django Aggregation聚合使用方法解析
Aug 01 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
使用Pycharm分段执行代码
Apr 15 Python
python如何调用java类
Jul 05 Python
matplotlib阶梯图的实现(step())
Mar 02 Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 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计算当前程序执行时间示例
2014/04/24 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
Vue 实现输入框新增搜索历史记录功能
2019/10/15 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
Python深度优先算法生成迷宫
2018/01/22 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
Python标准库shutil用法实例详解
2018/08/13 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
Python之多进程与多线程的使用
2021/02/23 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
美国汽车交易网站:Edmunds
2016/08/17 全球购物
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
生产车间实习自我鉴定
2013/09/23 职场文书
事业单位公务员的职业生涯规划
2014/01/15 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
个性婚礼策划方案
2014/05/17 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
群众路线剖析材料
2014/09/30 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
事业单位聘任报告
2015/03/02 职场文书
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android