Python代理IP爬虫,总被限制和反限制?但是道高一尺魔高一丈。

什么是网络爬虫 又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。网络爬虫可以根据指定的规则,从互联网上下载网页、图片、视频等内容,并抽取其中的有用信息进行处理。网络爬虫的工作流程包括获取网页源代码、解析网页内容、存储数据等步骤。根据其目的工作方式的不同,网络爬虫可以分为多种类型。常见的网络爬虫包括通用爬虫、聚焦爬虫、增量式爬虫等。 阅读详情


前言

Python爬虫要经历爬虫、爬虫被限制、爬虫反限制的过程。当然后续还要网页爬虫限制优化,爬虫再反限制的一系列道高一尺魔高一丈的过程。爬虫的初级阶段,添加headers和ip代理可以解决很多问题。
本人自己在爬取豆瓣读书的时候,就以为爬取次数过多,直接被封了IP。后来就研究了代理IP的问题。
(当时不知道什么情况,差点心态就崩了…)下面给大家介绍一下我自己代理IP爬取数据的问题,请大家指出不足之处。
在这里插入图片描述


1.问题

这是我的IP被封了,一开始好好的,我还以为是我的代码问题了
在这里插入图片描述

二、思路

从网上查找了一些关于爬虫代理IP的资料,得到下面的思路

  1. 爬取一些IP,过滤掉不可用
  2. 在requests的请求的proxies参数加入对应的IP
  3. 继续爬取
  4. 收工
  5. 好吧,都是废话,理论大家都懂,上面直接上代码…

思路有了,动手起来!

三、运行环境

Python 3.7, Pycharm
这些需要大家直接去搭建好环境…

四、准备工作

  1. 爬取IP地址的网站(国内高匿代理)
  2. 校验IP地址的网站
  3. 你之前被封IP的py爬虫脚本…

上面的网址看个人的情况来选取

五、爬取IP的完整代码

PS:简单的使用bs4获取IP和端口号,没有啥难度,里面增加了一个过滤不可用IP的逻辑
关键地方都有注释了

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2018/11/22 
# @Author : liangk
# @Site :
# @File : auto_archive_ios.py
# @Software: PyCharm


import requests
from bs4 import BeautifulSoup
import json


class GetIp(object):
 """抓取代理IP"""

 def __init__(self):
 """初始化变量"""
 self.url = 'http://www.xicidaili.com/nn/'
 self.check_url = 'https://www.ip.cn/'
 self.ip_list = []

 @staticmethod
 def get_html(url):
 """请求html页面信息"""
 header = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
 }
 try:
  request = requests.get(url=url, headers=header)
  request.encoding = 'utf-8'
  html = request.text
  return html
 except Exception as e:
  return ''

 def get_available_ip(self, ip_address, ip_port):
 """检测IP地址是否可用"""
 header = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
 }
 ip_url_next = '://' + ip_address + ':' + ip_port
 proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
 try:
  r = requests.get(self.check_url, headers=header, proxies=proxies, timeout=3)
  html = r.text
 except:
  print('fail-%s' % ip_address)
 else:
  print('success-%s' % ip_address)
  soup = BeautifulSoup(html, 'lxml')
  div = soup.find(class_='well')
  if div:
  print(div.text)
  ip_info = {'address': ip_address, 'port': ip_port}
  self.ip_list.append(ip_info)

 def main(self):
 """主方法"""
 web_html = self.get_html(self.url)
 soup = BeautifulSoup(web_html, 'lxml')
 ip_list = soup.find(id='ip_list').find_all('tr')
 for ip_info in ip_list:
  td_list = ip_info.find_all('td')
  if len(td_list) > 0:
  ip_address = td_list[1].text
  ip_port = td_list[2].text
  # 检测IP地址是否有效
  self.get_available_ip(ip_address, ip_port)
 # 写入有效文件
 with open('ip.txt', 'w') as file:
  json.dump(self.ip_list, file)
 print(self.ip_list)


# 程序主入口
if __name__ == '__main__':
 get_ip = GetIp()
 get_ip.main()

六、使用方法完整代码

PS: 主要是通过使用随机的IP来爬取,根据request_status来判断这个IP是否可以用

为什么要这样判断?
主要是虽然上面经过了过滤,但是不代表在你爬取的时候是可以用的,所以还是得多做一个判断

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2018/11/22 
# @Author : liangk
# @Site :
# @File : get_douban_books.py
# @Software: PyCharm

from bs4 import BeautifulSoup
import datetime
import requests
import json
import random

ip_random = -1
article_tag_list = []
article_type_list = []


def get_html(url):
 header = {
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
 }
 global ip_random
 ip_rand, proxies = get_proxie(ip_random)
 print(proxies)
 try:
  request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
 except:
  request_status = 500
 else:
  request_status = request.status_code
 print(request_status)
 while request_status != 200:
  ip_random = -1
  ip_rand, proxies = get_proxie(ip_random)
  print(proxies)
  try:
   request = requests.get(url=url, headers=header, proxies=proxies, timeout=3)
  except:
   request_status = 500
  else:
   request_status = request.status_code
  print(request_status)
 ip_random = ip_rand
 request.encoding = 'gbk'
 html = request.content
 print(html)
 return html


def get_proxie(random_number):
 with open('ip.txt', 'r') as file:
  ip_list = json.load(file)
  if random_number == -1:
   random_number = random.randint(0, len(ip_list) - 1)
  ip_info = ip_list[random_number]
  ip_url_next = '://' + ip_info['address'] + ':' + ip_info['port']
  proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}
  return random_number, proxies


# 程序主入口
if __name__ == '__main__':
 """只是爬取了书籍的第一页,按照评价排序"""
 start_time = datetime.datetime.now()
 url = 'https://book.douban.com/tag/?view=type&icn=index-sorttags-all'
 base_url = 'https://book.douban.com/tag/'
 html = get_html(url)
 soup = BeautifulSoup(html, 'lxml')
 article_tag_list = soup.find_all(class_='tag-content-wrapper')
 tagCol_list = soup.find_all(class_='tagCol')

 for table in tagCol_list:
  """ 整理分析数据 """
  sub_type_list = []
  a = table.find_all('a')
  for book_type in a:
   sub_type_list.append(book_type.text)
  article_type_list.append(sub_type_list)

 for sub in article_type_list:
  for sub1 in sub:
   title = '==============' + sub1 + '=============='
   print(title)
   print(base_url + sub1 + '?start=0' + '&type=S')
   with open('book.text', 'a', encoding='utf-8') as f:
    f.write('\n' + title + '\n')
    f.write(url + '\n')
   for start in range(0, 2):
    # (start * 20) 分页是0 20 40 这样的
    # type=S是按评价排序
    url = base_url + sub1 + '?start=%s' % (start * 20) + '&type=S'
    html = get_html(url)
    soup = BeautifulSoup(html, 'lxml')
    li = soup.find_all(class_='subject-item')
    for div in li:
     info = div.find(class_='info').find('a')
     img = div.find(class_='pic').find('img')
     content = '书名:<%s>' % info['title'] + ' 书本图片:' + img['src'] + '\n'
     print(content)
     with open('book.text', 'a', encoding='utf-8') as f:
      f.write(content)

 end_time = datetime.datetime.now()
 print('耗时: ', (end_time - start_time).seconds)

为什么选择国内高匿代理!
在这里插入图片描述


总结

使用这样简单的代理IP,基本上就可以应付在爬爬爬着被封IP的情况了。而且没有使用自己的IP,间接的保护…

大家有其他的更加快捷的方法,欢迎大家可以拿出来交流和讨论,谢谢。


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉CSDN大礼包:《Python入门资料&实战源码&安装工具】免费领取安全链接,放心点击

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

动态IP代理技术在网络爬虫中的实际使用 动态IP代理技术是指通过程序自动获取、更换代理服务器的IP地址,以实现爬虫在访问目标网站时的IP地址动态变化。这种技术可以有效避免IP被封锁的问题,提高爬虫的可用性稳定性。 阅读详情

相关推荐

Python 网络爬虫进阶:动态网页取与机制应对

使用 Selenium 处理动态网页。应对常见机制,如设置代理、随机延迟等。提升取性能的方法,包括多线程异步取。下一步,建议尝试构建一个完整的爬虫项目,如取新闻网站、商品价格监控等,并学习如何处理复杂的场景。祝你爬虫之路越走越远!

m0_67403143的博客 2200

Python网络爬虫实战进阶:代理IP池免费送

通过以上步骤,即可实现在Python网络爬虫实战中使用代理IP池进行网络取。需要注意的是,代理IP池只是一种技术手段,要遵循网络爬虫的道德法律规定,不要滥用代理IP进行非法取。

zhangxia_的博客 8845

S盒+异或+循环密钥:Windows PE查表逆向实战详解

S盒+异或+循环密钥:Windows PE查表逆向实战详解

Morilight的博客 720

什么是IP代理爬虫技术?

在数字时代,数据成为了新的石油。从企业到研究人员,都在争先恐后地获取分析数据。本文深入探讨了IP代理爬虫技术的重要性与实用性,涵盖了网络爬虫的工作原理、IP代理的作用,以及它们如何相辅相成地解决数据采集中的难题。通过详细的技术分析代码示例,无论你是数据采集领域的新手还是专家,都能从中获益。关键词包括:IP代理、网络爬虫、数据采集、爬虫策略、技术解决方案等,旨在帮助本文通过搜索引擎如百度更容易被发现。技术功能应用场景IP代理隐藏真实IP数据采集、隐私保护网络爬虫自动化数据采集。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:CSDNWF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 6317

Python网络爬虫笔记】14-使用代理绕过访问限制

代理服务器(Proxy Server)是位于客户端目标服务器之间的中间服务器。当我们通过代理服务器发送请求时,目标服务器看到的是代理服务器的IP地址,而不是我们的真实IP地址。这样,代理服务器可以起到隐藏真实IP、缓存数据、过滤内容等作用。在Python网络爬虫中使用代理是一个非常实用的技巧,可以帮助我们隐藏真实IP、绕过访问限制、提高取效率等。本文介绍了代理的基本概念、类型以及在Python中使用代理的方法,并通过一个典型案例演示了如何在实际项目中应用代理。希望这些内容对大家有所帮助!

zi__you的博客 1856

Python爬虫(18)攻防战:动态IP池构建与代理IP实战指南(突破95%封禁率)

爬虫请求频率超过‌5次/秒‌时,目标网站系统将在‌10秒内‌封锁当前IP。据2024年全球技术报告,‌83%的网站采用IP指纹检测‌作为核心防御手段。本文将深入解析如何通过requests库的proxies参数构建‌动态代理IP池‌,结合智能路由与熔断机制实现突围,实测将IP封禁率从‌72%降至3%‌,并同步提供企业级代理池管理方案与异步高并发实战代码。

CSDN博客专家,领域包括但不限于:AI、大数据、Python、架构师,有合作、课程、问题、疑惑请私信博主 3431

Python 网络爬虫进阶:机制与应对策略

爬虫机制是指网站为了防止未经授权的数据抓取行为而采取的技术手段。IP 限制:通过限制单个 IP 的请求频率或请求数量来防止滥用。User-Agent 检测:检查客户端发送的 User-Agent 字段是否合法,非主流浏览器可能会被拦截。Captcha 验证码:要求用户完成验证码验证后才能继续操作。动态内容加载:使用 JavaScript 动态生成网页内容,使得简单的 HTTP 请求无法获取完整数据。Cookie Session 管理。

2501_91246469的博客 2203

Python爬虫【十八章】攻防战:动态IP池构建与代理IP实战指南

‌封禁率降低‌:从72%降至3%以下(实测某金融数据平台)‌抓取效率提升‌:通过代理并行将吞吐量提高8倍‌成本优化‌:智能路由减少30%代理资源浪费。

2501_92499985的博客 2192

Agent 记忆压缩通常有哪些方法?

在传统软件中,状态可以通过关系型数据库做毫秒级精准存取;而在 AI Agent 架构中,大模型本身是无状态的概率推理引擎。为了维持多轮交互的连续性,开发者必须将历史记忆注入到上下文(Context)中。上下文爆炸与成本失控:多轮对话与工具调用轨迹(Tool Traces)包含海量冗余 Token,每次 API 请求都需要对全量历史重复计费,成本呈二次方上升。推理延迟(Latency)恶化:超长上下文会导致 GPU 在 Prefill 阶段的计算耗时大幅拉长,严重破坏实时交互体验。

2603_96126046的博客 312

05 从零搭建 GPT 模型:LayerNorm、GELU 与解码器堆叠

本文介绍从零搭建GPT模型的关键组件:LayerNorm对特征维归一化,GELU平滑激活,前馈网络扩展收缩,残差连接缓解梯度消失。随后组装TransformerBlock(多头注意力+前馈,Pre-LN),最终构建GPTModel并实现文本生成,附参数量核算。

元直的博客 501

22-DataCenter报文序列化

(put在循环后),解析侧遇到时continue不影响store循环——顺序无关但习惯上收尾。

yuhou25的博客 225

可以做年龄编辑的gan对抗网络(SAGAN)

把这 10 张(或更多年龄段)图片按顺序拼接,用 OpenCV 或 FFmpeg 导出为 MP4,就能看到“一个人”的年龄变化过程。:模型只学了 10 个离散年龄段(0~9),直接切换标签会导致五官突然“跳变”,无法生成 18岁→18.5岁 这种细腻变化。如果连续年龄回归,会更加的丝滑,接下来我们将修改一版连续年龄回归的代码,还是在这个的基础之上进行!,比如用预训练的 ArcFace 提取人脸特征,约束不同年龄帧的特征向量尽量接近。,会生成固定噪声下不同年龄的人脸图片,实现“编辑年龄”的效果。

有的话没说出来之前,你是他的主人,一旦说出来你就成了他的奴隶||想要干好事,别太把自己当人,别把别人太不当人||认识这个人就是开了一扇窗户,就能看到不一样的东西,听到不一样的声音,能让你思考、觉悟,这已经够了 218

2026科学实验能力大赛真题:护林飞行闯关解析

2026 首届全国青少年科学实验能力大赛决赛已于 8 月 20—22 日在济南收官,9 月起各赛区成绩陆续公布。这场白名单赛事鼓励青少年用"做中学"的方式呈现科学探究过程,而图形化编程正是把科普内容变成可交互作品的好工具。今天我们用一道原创项目题「护林飞行闯关」,带大家用 Scratch 做一个科普护林小游戏,把六大考点串成能玩的作品。

IT_Scratch的博客 206

基于Python的爱奇艺视频数据可视化分析系统

长视频平台剧集、评分、热度与评论数据体量大、维度多,手工汇难以快速把握类型结构、口碑分布与主演导演影响力。系统采用 B/S 架构,后端入口为app.py,运行端口8060;数据库使用 MySQL(库名iqiyi),经 PyMySQL 访问。前台基于 Bootstrap 5、本地中的 ECharts 5 与 echarts-wordcloud,配合主题。业务表包括usersdramascommentsfavorites。数据可通过导入,或经/ 相关脚本补充样本。分析层在。

qq_35928134的博客 234

Java深入解析篇二十之JavaStream API详解

Stream(流)是引入的数据处理抽象,位于包。它表示从数据源产生的元素序列,并支持对其进行函数式、聚合式操作。不是集合:流不存储数据,只描述对数据的计算;不是 IO 流:与无关;惰性管道:中间操作只是登记,终端操作才触发实际计算。// 命令式写法(对照) // List<String> r = new ArrayList<>();

萧瑟余晖的博客 346

Django的手机数据分析与可视化

Django的手机数据分析与可视化系统 摘 要 本系统基于Django框架、HTMLMySQL数据库技术,构建了一个全面的手机数据分析与可视化平台。大屏内容丰富,包括品牌市场份额分布、手机价格区间分布、各维度评分分布、热门机型Top10、内存容量分布以及品牌评分与价格分析等多个模块。通过这些模块,用户可以直观地了解手机市场的整体趋势、各品牌的市场表现、手机价格分布情况、用户评分分布以及热门机型的详细信息。系统采用了先进的可视化技术,将复杂的数据以图表的形式呈现,使得数据更加易于理解分析。 在管理功能方

weixin_41915110的博客 770

Pixhawk 6C — Mission Planner 烧录 & 全套校准教程

适用于自行编译的 ArduPilot 固件。

2301_76633800的博客 299

Python Class 参数传递完全指南

Python Class 参数传递完全指南:1.1 实例方法(最常用)1.2 类方法(@classmethod)1.3 静态方法(@staticmethod)2. 嵌套函数(def 内嵌 def)的 4 种传参方式2.1 闭包捕获(读取外层)2.2 显式传递(推荐用于灵活传参)2.3 nonlocal 修改外层2.4 使用 self 传递(共享状态)3. 继承中的参数传递(super())4. 灵活传参:*args 与 **kwargs5. 嵌套层级过深时的最佳实践(工程建议)

m0_54652313的博客 26
上一篇: 大数据开发选择Python还是Java?各路大神的见解总结。
下一篇: Python爬取京东双十一商品可视化价格曲线示例代码
一秋的编程笔记
博客等级 码龄3年 1573粉丝 319原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值