Python爬虫进阶实战项目:使用青果网代理高效爬取某手办网详情数据

1 引言

计算机,获取数据,还在慢慢复制粘贴?聪明的朋友都已经用爬虫高效获取数据,但是经常搞爬虫遇见ip管控防爬,咱们怎么处理?在我看来随着数据需求增加,爬虫成为高效获取数据的工具。然而,许多网站通过IP管控等防爬机制来阻止爬虫访问,导致频繁封IP。为解决这个问题,我们可以通过使用代理IP池、调整请求头、模拟用户行为等方法,突破防爬虫限制,保持爬虫高效运行。

1.1 传统爬虫的局限性

传统爬虫存在一些局限性。首先,许多网站使用反爬虫机制,如验证码和IP限制,来阻止爬虫抓取数据。其次,对于动态网页,传统爬虫难以处理 JavaScript 渲染的内容,导致无法获取完整数据。此外,网站结构变化频繁,爬虫代码需要不断调整,增加了维护成本。与此同时,未经授权抓取数据可能涉及法律风险,侵犯网站的使用条款。最后,进行大规模抓取时,爬虫会消耗大量的网络带宽和计算资源,降低抓取效率


1.2 代理IP的必要性与优势

现代网站为了保护自身数据和减少恶意爬虫的影响,通常会在后台设置反爬虫机制,如限制每个IP的访问频率,自动检测并封禁访问异常的IP地址。当一个IP频繁请求相同或相似的数据时,网站可能会识别该IP为爬虫行为,并将其封禁。这时,代理IP可以有效解决这个问题。通过切换多个代理IP,爬虫能够避免频繁使用同一IP,从而降低被封禁的风险。此外,代理IP还能够模拟正常用户的访问行为,进一步规避反爬虫机制。

1.3 如何选择国内代理IP?


1.3.1 收费标准

这里我们列举四家产品进行对比,方便我们进行直观的参考一番~

● 青果网络

青果网代理产品主要分为四种:弹性提取、按量提取、均匀提起、通道提取

  1. 每天任意时段,日更200万资源,平均99.9%成功率的弹性提取

  2. 不限制使用的终端数,任意时段使用,城市级定位的按量提取

  3. 每分钟都能提起IP,城市级定位,平均99.9%成功率的均匀提取

  4. 多资源可选,日更200万资源,平均99.9%成功率的通道提取

每种套餐包含了6小时的免费体验时长,免费啊家人们,这不总比哪些不给你测试的机会直接让你充钱的厂家良心多了啊

● 四叶天

四叶天HTTP的产品可以选择不同的带宽还有城市的选择,但是时长这里没有没有免费体验,但总体是非常不错的

● 豌豆代理

豌豆代理,这部分时长的下限进一步提升到了1周,可能服务的用户不大相同吧,对于仅仅想尝鲜的用户可能不是那么友好。

● 小象代理

小象代理的包天价格也是十分划算的仅需5¥,但是相比于青果网络来讲,后者更实惠一点,1天的价位是4.4¥而且还提供6小时的免费体验时长。

1.3.2 综合性价比

1、从价格性价比来看,青果网络为每种产品都提供了6小时的免费体验时长,光从这点就领先其余厂家了,当然其余厂家例如小象和四叶天也是很便宜的,但对于豌豆来说,可能下限是一周所以显得贵了点。

2、另外为什么青果网络这么豪气,可以由于他们家采用的是自研的服务器,全国都有数据中心,设备占据了一定的优势,当然硬件够了,软件也不可能差。

3、再就是品牌溢价问题了,这决定了价位,这可能就是青果网络为什么比许多厂家价位低的主要原因了吧。


2 青果网络代理IP测试

2.1 HTTP代理测试是否有必要?

我先抛出结论,这是非常之有必要的好吧,一款优质的HTTP代理,是方方面面都优质的,具体可以表现为:响应速度、IP池可用率、还有带宽、匿名安全等等。

优质的HTTP代理会帮助我们更快的处理任务,相反就会造成程序员的情绪大起大落可以想象有多恐怖吧既然大家认识到了HTTP代理的重要性,我自掏腰包为大家测评一款在网络上小有名气的HTTP代理产品,青果网络HTTP代理,大家可以简单的参考一波,请看下节~

2.2 HTTP代理测试分为哪几点?

我们在进行HTTP代理测试时,通常需要重点关注几个核心指标:响应速度、可用率、稳定性、带宽、匿名度和安全性。

这些指标通常会直接影响到代理服务的质量和实际使用体验。在本次测试中,我选择了青果网络的动态共享HTTP代理,通过实际测试和综合分析,来评估其是否符合高效、安全的代理需求。

● 响应速度测试

首先是大家最为关注的测量HTTP代理与目标服务器之间的响应时间,评估其连接速度。既然是Speed,那么自然是越快越好了。在本次测试中,我们通过统计所有请求的响应时间并计算平均响应时间,发现青果网络的动态共享HTTP代理在响应速度上表现优异,能够快速传输请求并及时接收响应。相比其他代理,青果网络的代理更能减少延迟,提高数据抓取效率。

● 可用率测试

之后我们测试了高可用性的HTTP代理,这意味着它在大部分时间内能够稳定运行并顺利传递请求和响应。在测试过程中,我设置了30秒的响应时间阈值。测试中1000个代理中,青果网络提供的代理在超过95%的时间内能够在30秒内成功响应请求,显示出高可用性,适合需要长时间、大批量请求的应用场景。

稳定性测试

在数据抓取过程中,稳定性是一个不可忽视的因素。青果网络的代理在长时间的使用中保持了非常好的稳定性,连接没有频繁掉线或中断,毕竟如果中断可能会导致程序白跑,这对于程序员十分伤的嘞~这一稳定性说明青果网络的代理非常适合大规模、高频率的数据抓取任务,完全可以避免了中断带来的数据丢失。

带宽测试

HTTP代理的带宽决定了其数据传输的能力,尤其对于高流量的应用至关重要。青果网络的动态分享HTTP代理在带宽方面表现出色,其高带宽和低延迟保证了大规模数据传输的顺畅,测试过程中没有出现明显的带宽瓶颈或速度下降,带给开发者极为流畅的使用体验。

匿名度与安全性测试

对于需要保护隐私和安全的应用场景,匿名性和安全性是测试代理时必须重点考量的指标,没有出现DNS泄漏、WebRTC泄漏等安全问题,。

2.3 获取青果代理IP账号

测试完代理,我们接下来可以试着去部署,体验一下是不是真的那么优质~

2.3.1 注册与获取API链接

打开青果代理,体验一下

完成认证

之后我们选择免费的6小时

接下来提交订单即可 

购物完成之后我们点击提取IP

接下来设置提取规则,这里我们默认就行

网页上成功显示IP,说明这里是没有问题的

2.3.2 Python脚本获取IP

复制API链接

准备代码,我们将其替换成自己的代理

import requests
import timedef get_ip():url = "自己的API链接如上图"while 1:try:r = requests.get(url, timeout=10)except:continueip = r.text.strip()if '请求过于频繁' in ip:print('IP请求频繁')time.sleep(1)continuebreakproxies = {'https': '%s' % ip}return proxiesif __name__ == '__main__':proxies = get_ip()print(proxies)

替换完成我们运行测试一下

3 某手办网站数据爬取实战

3.1 环境准备

        这里我们需要安装一些必要的库,requests、BeautifulSoup、csv pip install 库名即可


3.2 网站分析

        对于其他开发者来讲一般都是爬取电商网站,今天来点有意思的,如何高效爬取一个手办网   https://www.hpoi.net/index/home

(1)我们进入网站后点击键盘的F12,或者右键检查,就可以获取我们想要的必要数据了,同时我们可以复制请求头信息这里复制User-Agent即可~

上图对应的URL:

https://www.hpoi.net/hobby/all?order=add&r18=-1&workers=&view=3&category=100&page=1

(2)接着我们点击第二页、第三页

https://www.hpoi.net/hobby/all?order=add&r18=-1&workers=&view=3&category=100&page=2

https://www.hpoi.net/hobby/all?order=add&r18=-1&workers=&view=3&category=100&page=3

我们将其列出来:

https://www.hpoi.net/hobby/all?order=add&r18=-1&workers=&view=3&category=100&page=1

https://www.hpoi.net/hobby/all?order=add&r18=-1&workers=&view=3&category=100&page=2

https://www.hpoi.net/hobby/all?order=add&r18=-1&workers=&view=3&category=100&page=3

我们就可以观察出来,page后跟着的恰恰是页数,那么我们就好办了,我们先粗略的记录一下翻页的逻辑,就是使用for循环

(3)再接着我们需要选中想要爬取的内容,点击一下,在HTML的结构里面就可以看到具体的数据了,我们接下来处理就是要使用这个HTML结构

3.3 导入模块

import requests
from bs4 import BeautifulSoup

3.4 实现翻页功能

3.4.1 设置请求头

这里根据我设置User-Agent即可(可以参照3.2网站分析取得请求头信息),别的网站可以还需要添加更多信息

3.4.2 循环爬取前三页

使用for循环进行爬取

for page in range(1, 4):url = f'https://www.hpoi.net/hobby/all?order=add&r18=-1&workers=&view=3&category=100&page={page}

3.4.3 发送请求并获取响应并解析内容

调用requests进行获取响应,同时调用BeautifulSoup进行解析

response = requests.get(url, headers=headers, proxies=proxies, timeout=10)if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')
3.4.4 提取手办信息
product_elements = soup.select('.hpoi-detail-grid-right')
for product in product_elements:name = product.select_one('.hpoi-detail-grid-title a').text.strip()...

3.5 通过代理IP发送请求

在使用代理IP发送请求之前,我们需要进行白名单的添加

完整代码:

import requests
from bs4 import BeautifulSoup
import timedef get_ip():url = "https://share.proxy.qg.net/get?key=578E2022&num=1&area=&isp=0&format=txt&seq=\r\n&distinct=false"while 1:try:r = requests.get(url, timeout=10)except:continueip = r.text.strip()if '请求过于频繁' in ip:print('IP请求频繁')time.sleep(1)continuebreakproxies = {'https': '%s' % ip  # 生成代理字典}return proxiesheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}for page in range(1, 4):url = f'https://www.hpoi.net/hobby/all?order=add&r18=-1&workers=&view=3&category=100&page={page}'proxies = get_ip()try:response = requests.get(url, headers=headers, proxies=proxies, timeout=10)if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')product_elements = soup.select('.hpoi-detail-grid-right')for product in product_elements:name = product.select_one('.hpoi-detail-grid-title a').text.strip()manufacturer = product.select_one('em:contains("厂商:")')ship_date_element = product.select_one('em:contains("出荷:")')if ship_date_element:ship_date_text = ship_date_element.find_next('span').get_text(strip=True)else:ship_date_text = 'N/A'add_date_element = product.select_one('em:contains("新增:")')if add_date_element:add_date_text = add_date_element.find_next('span').get_text(strip=True)else:add_date_text = 'N/A'if manufacturer:manufacturer_text = manufacturer.find_next('span').text.strip()else:manufacturer_text = 'N/A'print(f'产品名称: {name}')print(f'厂商: {manufacturer_text}')print(f'出荷日期: {ship_date_text}')print(f'新增日期: {add_date_text}')print('---')print(f'第 {page} 页数据已爬取完毕\n')else:print(f'请求失败,状态码:{response.status_code}')except requests.exceptions.RequestException as e:print(f'请求发生异常: {e}')time.sleep(10)  # 出现异常时,暂停3秒后继续尝试

如下:

提取并保存数据

接下来我们写一段保存的代码,这里使用csv进行保存

# 打开CSV文件进行写入
with open('products.csv', 'w', newline='', encoding='utf-8') as csvfile:fieldnames = ['产品名称', '厂商', '出荷日期', '新增日期']  # CSV文件的列名writer = csv.DictWriter(csvfile, fieldnames=fieldnames)writer.writeheader()  # 写入列名

4 总结

​ 我们综合上面的测试数据以及案例演示,都证明了青果网络代理是一款十分优质的代理,无论是价位、速度、安全性、还是里面的套餐的种类和细节,都极大的满足了绝大开发者的需求。是我们在完成爬虫任务/数据采集时候的辅助

感兴趣的小伙伴可以体验一下,体验链接:青果网络

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【kubernetes】kubernetes各组件的调用关系

目录 1. 说明2. Kubernetes组件概述2.1 控制平面组件2.2 节点组件 3. Kubernetes组件调用关系4. 示例说明 1. 说明 1.Kubernetes是一个开源的容器编排工具,其各个组件之间存在着复杂的调用关系,共同构建起一个完整的容器编排系统。2.Kubernetes集群主要…

大语言模型---Llama7B和Llama8B的区别;模型参数量;权重文件的不同;嵌入层权重的不同;输入序列长度的不同;应用场景

文章目录 1.概要2. 模型参数量3. 权重文件的不同4. 嵌入层权重的不同5. 输入序列长度的不同6. 应用场景 1.概要 LLaMA(Large Language Model Meta AI)是由Meta开发的一系列语言模型,其中不同版本的参数量(如7B、8B等)…

Linux命令思维导图

看到一个很不错的Linux命令思维导图,用机器翻译了一下,建议收藏备用。 附上英文版:

C++自动化测试:GTest 与 GitLab CI/CD 的完美融合

在现代软件开发中,自动化测试是保证代码质量和稳定性的关键手段。对于C项目而言,自动化测试尤为重要,它能有效捕捉代码中的潜在缺陷,提高代码的可维护性和可靠性。本文将重点介绍如何在C项目中结合使用Google Test(GTe…

查询mysql用户信息及授权

SELECT user, host, account_locked, password_expired, password_last_changed, password_lifetime FROM mysql.user;user: 用户名。 host: 用户允许连接的主机。 account_locked: 账户是否被锁定。 password_expired: 密码是否已过期。 password_last_changed: 密码上…

算法模板2:位运算+离散化+区间合并

文章目录 1.6 位运算**位运算的常见应用**1.7 离散化**经典离散化题目例子****1. 区间合并和覆盖长度问题****2. 区间查询与修改****3. 动态求第 K 小值****4. 区间最大重叠次数****5. 动态逆序对计数****6. 二维区间问题****7. 模拟车流/时间段事件****8. 区间众数统计** **具…

【淘汰9成NLP面试者的高频面题】LSTM中的tanh和sigmoid分别用在什么地方?为什么?

博客主页: [青松] 本文专栏: NLP 大模型百面百过 【淘汰9成NLP面试者的高频面题】LSTM中的tanh和sigmoid分别用在什么地方?为什么? 重要性:★★★ 💯 本题主要考察面试者对以下问题的理解: ① 数据特征和模…

【中间件】Redis

一、什么是Redis Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置…

Python爬取豆瓣电影全部分类数据并存入数据库

在当今数字化的时代,网络上丰富的影视资源信息吸引着众多开发者去挖掘和利用。今天,我就来和大家分享一段有趣的代码,它能够从豆瓣电影平台获取相关数据并存储到数据库中哦。 结果展示(文末附完整代码): 目…

YOLOv11(Ultralytics)视频选定区域目标统计计数及跟踪

在计算机视觉的众多应用场景中,对特定区域的目标进行检测、跟踪与计数是一个常见且重要的需求。无论是在智慧交通中统计通过特定路口的车辆数量,还是在零售分析中追踪进入特定区域的顾客行为,这一功能都发挥着不可或缺的作用。 随着深度学习…

数据结构与算法——1120——时间空间效率问题求边界值

目录 1、效率问题 1、时间复杂度 1、O(1) 2、O(n) 3、O(n) 或O(n*log2n)——n倍的log以2为底n的对数 例题 4、O(n) 2、空间复杂度 3、数组和链表 2、面试题之求边界值 题目 解答 (1)-i (2)~i (3&#x…

第三十九篇 ShuffleNet V1、V2模型解析

摘要 ShuffleNet V1 ShuffleNet V1是由旷视科技(Megvii,又称Face)在2017年底提出的一种轻量级卷积神经网络架构。该网络专为移动设备和边缘计算环境设计,旨在以较低的计算资源实现高效的图像分类和其他计算机视觉任务。 特点与…

本地推流,服务器拉流全流程

本地推流,服务器拉流全流程 环境准备:准备一台服务器,其中openssl最好为1.1.1版本(可以直接使用ubuntu20.04操作系统) 服务器拉流 1、 安装环境依赖 sudo apt-get update sudo apt-get install unzip sudo apt-get…

【第八课】Rust中的函数与方法

目录 前言 函数指针 函数当作另一个函数的参数 函数当作另一个函数的返回值 闭包 方法 关联函数 总结 前言 在前面几课中,我们都或多或少的接触到了rust中的函数,rust中的函数和其他语言的并没有什么不同,简单的语法不在这篇文章中赘…

详解Qt之QtMath Qt数学类

文章目录 QtMath详解前言QtMath简介QtMath中的函数1. 三角函数1.1 qSin1.2 qCos 2. 指数与对数函数2.1 qExp2.2 qLn 3. 幂运算与平方根3.1 qPow3.2 qSqrt QtMath的优势1. 一致性与跨平台支持2. 与Qt生态系统集成3. 简洁性 总结 QtMath详解 前言 在C的开发中,数学运…

基于Java Springboot海洋馆预约系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

产业用机器人中的旋转花键若损伤有何影响?

旋转花键在产业用机器人中是关键的组件之一,如果机器人中的旋转花键损坏,会对机器人的运行和性能产生一定影响。以下是可能的影响: 1、功能受限:旋转花键用于连接两个旋转部件(例如电机轴和传动轴)&#xf…

MySQL-- 数据类型

1. 常⽤数据类型分类 我们在学习JAVA语言⾯向对象软件开发的过程中,通常会先进⾏需求分析从⽽得到类和属性,类是⾯向对象中的概念,对应到数据库中的概念就是实体,类中的属性对应实体中的属性。实体通常以表的形式存在&#xff0c…

CLIP-Adapter: Better Vision-Language Models with Feature Adapters 论文解读

abstract 大规模对比视觉-语言预训练在视觉表示学习方面取得了显著进展。与传统的通过固定一组离散标签训练的视觉系统不同,(Radford et al., 2021) 引入了一种新范式,该范式在开放词汇环境中直接学习将图像与原始文本对齐。在下游任务中,通…

百度在下一盘大棋

这两天世界互联网大会在乌镇又召开了。 我看到一条新闻,今年世界互联网大会乌镇峰会发布“2024 年度中国互联网企业创新发展十大典型案例”,百度文心智能体平台入选。 这个智能体平台我最近也有所关注,接下来我就来讲讲它。 百度在下一盘大棋…