当同一ip短时间内多次链接同一网站,很可能导致ip被封,所以需要利用代理ip防止封禁。
代理ip可以通过百度很容易的获取 比如 西刺代理
但是,很明显我们用爬虫的人,不是会一个个自己复制粘贴的人,所以自然想到用爬虫解决问题。
-本文不区分url和ip,为简化 都叫成ip
-文中有个特别注意一定要看
-本文全部代码见于我的Git

主要思路

1.从代理网站爬取IP地址及端口号并存储
2.验证ip能否使用
3.格式化ip地址
4.在requests中使用代理ip爬网站

具体实现

1.爬取代理IP

这一步很简单就直接上代码了

url = 'http://www.xicidaili.com/wt'
def get_ip_list(url, headers):""" 从代理网站上获取代理"""ip_list = []page = requests.get(url, headers=headers)soup = BeautifulSoup(page.text, 'lxml')ul_list = soup.find_all('tr', limit=20)print(len(ul_list))for i in range(2, len(ul_list)):line = ul_list[i].find_all('td')ip = line[1].textport = line[2].textaddress = ip + ':' + portip_list.append(address)return ip_list

最终获得的是是这样的ip:port列表

2.验证ip可用

验证可用有两种思路:
- 在格式化好的用代理IP访问指定网站,如果返回状态为200,表示这个代理是可以使用的
- 在ip_list基础上使用telnet来验证

直接访问式验证

import requests
#假设此时有一已经格式化好的ip代理地址proxies
proxies = {http: 'http://114.99.7.122:8752'https: 'https://114.99.7.122:8752'
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063'
}
url = 'http://www.whatismyip.com.tw/'
try:page = requests.get(url, headers=headers, proxies=proxies)except:print('失败')else:print('成功')

这个方法很容易想到,但是受限于代理的延时,很慢,于是有了下面一个快一点的使用telnet来验证
方法:

#这里假设有ip_list中某一ip
hd, port = ip.split(':')
try:telnetlib.Telnet(hd, port=port, timeout=20)
except:print '失败'
else:print '成功'

3.格式化

在Requests中使用代理爬取的格式是

import requests
requests.get(url, headers=headers, proxies=proxies)

其中proxies是一个字典其格式为:
对每个ip都有

proxies = {http: 'http://114.99.7.122:8752'https: 'https://114.99.7.122:8752'
}

这里注意:
对于http和https两个元素,这里的http和https
代表的不是代理网站上在ip后面接的类型
代表的**是**requests访问的网站的传输类型是http还是https
所以,如果,你爬的网站是http类型的你就用http,如果是https类型的你就用https,当然相应的在代理网站上爬的时候也要分别爬http或https的ip
当然为了省事,我们都加上,反正会验证能不能用,这样有更好的通用性。


具体格式化代码为:

def get_proxy(aip):"""构建格式化的单个proxies"""proxy_ip = 'http://' + aipproxy_ips = 'https://' + aipproxy = {'https': proxy_ips, 'http': proxy_ip}return proxy

4.使用代理建立爬虫

由于本身就是为了学习,所以建立爬虫爬取的是显示ip的网站http://www.whatismyip.com.tw/
这个网站会显示你的ip地址,从而可以很直观确认我们的代理是否成功了
代码是很简单的爬虫就直接上代码了:

def print_ip(proxies):"""利用http://www.whatismyip.com.tw/显示访问的ip"""cookies = {'sc_is_visitor_unique': 'rx6392240.1508897278.298AFF0AE2624F7BC72BADF517B67AEE.2.2.2.2.2.2.1.1.1',}headers = {'Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.8','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Cache-Control': 'max-age=0','Connection': 'keep-alive',}   url = 'http://www.whatismyip.com.tw/'try:page = requests.get(url, headers=headers, proxies=proxies)except:print(str(proxies) + 'is wrong')else:soup = BeautifulSoup(page.text, 'lxml')my_ip = soup.find('b').textprint('成功连接' + my_ip)

可以看到这里用的是第一种方式确认ip的可用

如果运行成功有如下显示:

【爬虫学习6】爬虫自动获取并使用代理ip相关推荐

  1. 【Python3.6爬虫学习记录】(十一)使用代理IP及用多线程测试IP可用性--刷访问量

    前言:本来准备写一个刷空间留言的脚本,然而kb TX,无限循环空间验证码.上午还傻x的学验证码识别,后来才发现根本发不了留言,即使填的是对的,仍然继续弹出.无奈,睡了一觉,开始搞新玩意–代理IP!其实 ...

  2. Python爬虫学习二爬虫基础了解

    1.什么是爬虫 爬虫就是进入网页自动获取数据的程序.当它进入一个网页时,将网页上需要的数据下载下来,并跟踪网页上的其他链接,进入新的页面下载数据,并继续跟踪链接下载数据. 2.URL URL,即统一资 ...

  3. Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)

    转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 前言 黑 ...

  4. python爬去新浪微博_Python爬虫爬取新浪微博内容示例【基于代理IP】

    Python爬虫爬取新浪微博内容示例[基于代理IP] 发布时间:2020-09-07 10:08:14 来源:脚本之家 阅读:120 本文实例讲述了Python爬虫爬取新浪微博内容.分享给大家供大家参 ...

  5. 交换机和路由器区别+自动获取和使用固定IP的区别+win10系统设置网络ip+两台电脑之间怎么互相传文件+两电脑用一根网线传数据+

    文章目录 交换机和路由器区别 1 路由器可以为局域网自动分配IP和虚拟拨号 交换机只是用来分配网络数据的 路由器在网络层,根据IP地址寻址. 路由器可以处理"TCP/IP"协议,交 ...

  6. 获取高匿代理ip的想法思路

    一.获取高匿代理IP思路 注意事项 做第二步之前你需要先找个地址url,用本机访问出来一个成功的页面,建议保留为html,作为后面使用,进行成功和禁用页面的对比,然后才可以高频访问此网站使你的电脑禁用 ...

  7. 获取高匿代理ip的步骤思路

    一.获取高匿代理IP思路 注意事项 做第二步之前你需要先找个地址url,用本机访问出来一个成功的页面,建议保留为html,作为后面使用,进行成功和禁用页面的对比,然后才可以高频访问此网站使你的电脑禁用 ...

  8. 获取高匿代理ip的步骤思路(推荐使用--刚找到的方法判断是否高匿)

    文章目录 一.获取高匿代理IP思路 注意事项 2.(刚找到的,推荐这个)判断高匿代理ip的另外俩个方法 1.获取高匿的可用代理ip,可以用以下四个步骤(之前的笨方法): 二.实践. 1.获取代理ip, ...

  9. 爬虫学习3.2 抓取西刺代理,并构建自己的代理池

    任务描述 学习什么是IP,为什么会出现IP被封,如何应对IP被封的问题. 抓取西刺代理,并构建自己的代理池. 西刺直通点:https://www.xicidaili.com/ . 参考资料:https ...

最新文章

  1. SAP RETAIL WB02 为门店激活物料分类账报错 - Distribution chain NMI1 00 not valid for retail price determination -
  2. 使用pycharm调试Python代码时F8快捷键失效
  3. wxWidgets:wxWebView类用法
  4. BAT机器学习面试1000题系列(第1~10题)
  5. CentOS下用于查看系统当前登录用户信息的4种方法
  6. PG中的几种数据类型转换方式
  7. Windows下Redis安装的那些事儿!
  8. jq实现剪裁图片设置为头像
  9. 北理珠计算机学院学生会,梦回北理
  10. Java基础之类加载器
  11. 海量图标矢量图免费下载【来自阿里】
  12. 绘制计算机网络拓扑图,绘制网络拓扑图1.ppt
  13. android 毫秒 计时器,Android 计时器: CountDownTimer和JobService
  14. SEM医械研发:常见医用塑料种类、特性与选用知识汇总
  15. vue 判断页面是首次加载还是刷新
  16. jumpserver 添加Windows主机
  17. Jira中的全流程开发管理
  18. TURN协议(RFC5766详解)
  19. 三角网导线平差实例_三角网近似平差及边长计算表
  20. cad批量转换pdf格式

热门文章

  1. 鸿蒙oppo vivo,华为鸿蒙成功的关键:要让小米、OPPO、VIVO都用上鸿蒙
  2. 高防服务器的作用和用途
  3. C4D如何锁定摄像机? C4D工程文件怎么锁住了?C4D打开为什么不能动了?
  4. 历史学习/科普知识宣传——闯关答题小程序
  5. SystemUI 人脸识别与相机冲突的整理文档
  6. python更新版本会丢失库吗_Python卸载后,随之的第三方库会消失吗
  7. ubuntu22.04版本安装CUDA及cuDNN
  8. 图形是用计算机绘制的画面也称矢量图,图形是用计算机绘制的画面,也称矢量图。...
  9. Heartbeat 安装教程
  10. js for forEach 跳出循环方式