在使用python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,那如何解决呢?使用代理ip,设置代理ip池。

以下介绍的免费获取代理ip池的方法:

优点:

1.免费

缺点:

1.代理ip稳定性差需要经常更换

2.爬取后ip存在很多不可用ip需要定期筛选

小建议:

该方法比较适合学习使用,如果做项目研究的话建议参考本人博客《python爬虫设置代理ip池——方法(二)》,购买稳定的代理ip

"""

一.主要思路

1.从代理ip网站爬取IP地址及端口号并储存

2.验证ip是否能用

3.格式化ip地址

4.在requests中使用代理ip爬取网站

二. 写在前面

在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

三.代码

1.配置环境,导入包

# IP地址取自国内髙匿代理IP网站:http://www.xicidaili.com/nn/
# 仅仅爬取首页IP地址就足够一般使用from bs4 import BeautifulSoup
import requests
import random

2.获取页面内容函数

def getHTMLText(url,proxies):try:r = requests.get(url,proxies=proxies)r.raise_for_status()r.encoding = r.apparent_encodingexcept:return 0else:return r.text

3.从代理ip网站获取代理ip列表函数,并检测可用性,返回ip列表

def get_ip_list(url):web_data = requests.get(url,headers)soup = BeautifulSoup(web_data.text, 'html')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)
#检测ip可用性,移除不可用ip:(这里其实总会出问题,你移除的ip可能只是暂时不能用,剩下的ip使用一次后可能之后也未必能用)for ip in ip_list:try:proxy_host = "https://" + ipproxy_temp = {"https": proxy_host}res = urllib.urlopen(url, proxies=proxy_temp).read()except Exception as e:ip_list.remove(ip)continuereturn ip_list

4.从ip池中随机获取ip列表

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

5.调用代理

if __name__ == '__main__':url = 'http://www.xicidaili.com/nn/'ip_list = get_ip_list(url)proxies = get_random_ip(ip_list)print(proxies)

python爬虫设置代理ip池相关推荐

  1. python爬虫设置代理ip池——方法(一)

    """ 在使用python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网 ...

  2. Python爬虫添加代理IP池(新手)

    给爬虫添加代理IP池 我们在运行爬虫的过程中由于请求次数过多经常会遇到被封IP的情况,这时就需要用到代理IP来解决.代理IP的原理,简单来说就像在本机和web服务器之间开一个中转站,把本机的请求交给代 ...

  3. 使用爬虫实现代理IP池之放弃篇

    2019独角兽企业重金招聘Python工程师标准>>> 啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的) ...

  4. 利用多线程爬虫搭建代理ip池的两种方法(含源码)

    搭建爬虫代理ip池的两种方法(含源码) 前言 一.ip池是什么? 二.爬取原理 三.使用步骤 方法一 爬取网站https://www.kuaidaili.com/ 验证 存取到mysql 方法二 爬取 ...

  5. Python 爬虫使用代理 IP 的正确方法

    代理 IP 是爬虫中非常常用的方法,可以避免因为频繁请求而被封禁.下面是 Python 爬虫使用代理 IP 的正确方法: 1. 选择可靠的代理 IP 供应商,购买或者免费使用代理 IP 列表. 2. ...

  6. Python之爬虫 搭建代理ip池

    文章目录 前言 一.User-Agent 二.发送请求 三.解析数据 四.构建ip代理池,检测ip是否可用 五.完整代码 总结 前言 在使用爬虫的时候,很多网站都有一定的反爬措施,甚至在爬取大量的数据 ...

  7. 爬虫单个ip代理设置_爬虫怎么设置代理ip池?

    网络技术现在是如此发达,用户换ip再也不用自己手动来,很多ip代理都是傻瓜式操作,智能完成切换,完全不用使用者操心. 像在我们在利用网络爬虫开展数据采集,遇到爬取频率过高.频次过多的问题,会碰到ip被 ...

  8. python进行爬虫设置代理ip之后不知道是否已经启用代理ip

    设置代理ip: 根据每个代理平台的格式不同,代理设置的方式也不尽一致,这里进行演示芝麻代理的配置: def ip_get():url = '形成的代理的链接'ip_list_con = request ...

  9. Python爬虫 教程:IP池的使用

    一.简介 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会禁止这个IP的访问.所以我们需要设 ...

最新文章

  1. keras 的 example 文件 cnn_seq2seq.py 解析
  2. 突破屏蔽限制,自己的网站使劲弹新IE窗口
  3. iOS开发之详解正则表达式
  4. #4 什么是shell与bash的特性
  5. 查询DBA_HIST_ACTIVE_SESS_HISTORY缓慢
  6. apache大师+伪静态_Apache开启伪静态示例
  7. python文件按行读取变为嵌套列表_迭代两个嵌套的2D列表,其中list2具有list1的行号...
  8. 用MATLAB将矩阵数据写入txt文件中,打开乱码原因
  9. [翻译] 编写高性能 .NET 代码--第二章 GC -- 配置选项
  10. Python学习笔记:闭包与作用域
  11. 《BI那点儿事》ETL中的关键技术
  12. NOIP模拟题——tractor
  13. EasyUI:datagrid清空所有选择行
  14. 生物信息学常见1000个软件的安装代码
  15. 信息学奥赛一本通(1079:计算分数加减表达式的值)
  16. word中“项目符号”和后面的文字间隔太远
  17. 高逼格的console.log(),要不来看下
  18. 代谢组学数据分析及网络药理学研究技术与实践
  19. Blazor —— 母版页的定义和使用(Layout)
  20. HDR相关标准-HLG/HDR10/HDR10+/DOLBY VISION

热门文章

  1. Ubuntu中文字体显示日语
  2. 不用取色器快速获取颜色的RGB
  3. 自定义滚动条修改x和y轴滚动条交叉地方的css样式
  4. 终端安全-企业保护数据安全的方法有哪些?
  5. linux 重新登录用户名,如何操作登录和退出linux系统
  6. 云计算的三大服务模式
  7. 树莓派基础实验17:温度传感器实验
  8. 从硬件到软件工程师,工作12年,我是如何实现财务自由的
  9. Netfilter和iptables学习总结
  10. ping工具的C语言简单实现 (ICMP echo)