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生成随机数的方法
Jan 14 Python
centos系统升级python 2.7.3
Jul 03 Python
python实现基于SVM手写数字识别功能
May 27 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
python使用matplotlib库生成随机漫步图
Aug 27 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
Django的性能优化实现解析
Jul 30 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
Jan 02 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
Jan 20 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
使用Pytorch实现two-head(多输出)模型的操作
May 28 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源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
网页javascript精华代码集
2007/01/24 Javascript
js TextArea的选中区域处理
2010/12/28 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
javascript数组详解
2014/10/22 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
js实现图片懒加载效果
2017/07/17 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
python实现马耳可夫链算法实例分析
2015/05/20 Python
Python实现合并excel表格的方法分析
2019/04/13 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
利用python画出AUC曲线的实例
2020/02/28 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
优秀毕业生推荐信
2013/11/02 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
推荐信怎么写
2014/05/09 职场文书
十佳少年事迹材料
2014/12/25 职场文书
安全员岗位职责范本
2015/04/11 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
2016大一新生军训感言
2015/12/08 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书