「爬虫实战分享:如何高效爬取某汽车官方销售排行榜」

本文目录

  • 💖前言
    • 一、💫代理IP的作用
    • 二、💫爬虫中的挑战
      • 1.代理IP的质量和稳定性
      • 2.IP封禁问题
      • 3. 反爬虫技术的升级
    • 三、💫亮数据动态代理:数据采集的可靠伙伴
      • 1、真实体验
    • 四、💫爬虫实战:使用亮数据代理ip爬取某汽车官方销售排行榜
      • 1.选择服务
      • 2.注册账号
      • 3.使用动态住宅ip
      • 4.验证代理ip是否可用
      • 5.代码实战
      • 6.扩展
    • 💫总结
    • 投票🚗(传送门)

💖前言

在互联网数据爬取过程中,代理IP已成为爬虫技术中不可或缺的工具。代理IP通过替代爬虫的真实IP地址,使得爬虫能够绕过网站的访问限制,如IP封禁、访问频率限制等。随着反爬虫技术日益复杂,代理IP为爬虫提供了更高的灵活性、隐私保护和稳定性。因此,合理使用代理IP,成为开发高效爬虫程序的关键。

一、💫代理IP的作用

代理IP的核心作用在于伪装请求来源,避免被目标网站检测到爬虫行为。通常,网站会通过检测单一IP的请求频率来判断是否为爬虫。当某个IP发送大量请求时,网站可能会封禁该IP,以防止爬虫程序继续抓取数据。使用代理IP可以将多个IP地址与请求分配进行关联,避免单一IP暴露在高频率请求下,从而降低封禁风险。

二、💫爬虫中的挑战

尽管代理IP能有效解决封禁问题,但在实际应用中,使用代理IP时也会遇到不少挑战:

1.代理IP的质量和稳定性

代理IP的质量直接影响爬虫的效率。一些免费代理或低质量代理IP可能存在连接不稳定、响应速度慢或易被封禁等问题。为了保证爬虫的持续性和稳定性,开发者需要选择高质量的付费代理服务。

2.IP封禁问题

高级的反爬虫机制能够识别和封锁大量使用代理IP的爬虫请求,尤其是当多个请求来自同一个代理池时。为了避免封禁,开发者需要确保代理IP池的多样性,并定期更换IP地址。

3. 反爬虫技术的升级

随着反爬虫技术的不断进步,越来越多的网站使用更加复杂的技术,如验证码、人机验证、JavaScript挑战等,来识别和阻止爬虫。即使使用代理IP,爬虫仍可能遭遇难以逾越的技术障碍

三、💫亮数据动态代理:数据采集的可靠伙伴

在本人日常工作中,工作内容与爬虫技术紧密相关。在长期的实践中,我尝试使用过众多不同来源的代理IP服务。经过实际体验和对比,其中有一款代理IP产品表现出色,堪称行业翘楚 Bright Data。它不仅能够全方位满足我在爬虫工作中的各种复杂需求,而且在性能、稳定性以及安全性等关键方面都展现出卓越的品质。正因如此,我愿意为其优质的服务支付相应的费用。

1、真实体验

  1. 全球覆盖与IP池规模
    从个人使用角度来看,我对网络内容的访问需求是多样化且广泛的。例如在进行市场调研时需要获取不同国家和地区的行业信息时,使用Bright Data,它提供的超1亿个ip以及涵盖超过200个国家地区,让我能够很轻松的突破地域限制,获取最真实、最贴近实际的信息,这为我的工作带来了极大的便利。

  2. 高匿名性与安全性
    在网络活动中,匿名性和安全性是我最为关注的因素之一。Bright Data提供的是真实用户的住宅代理IP地址,这一点让我非常放心。在使用其他一些平台时,我曾担心由于IP来源的问题而被目标网站轻易识破,导致被封禁,从而影响工作的进展。但Bright Data的真实住宅代理能够很好地模拟真实用户的行为,使我在进行网络访问时,很难被网站识别为爬虫流量,大大降低了被封禁的风险。

  3. 高速度与低延迟
    工作效率对于我来说也是至关重要,尤其是在处理大量数据抓取和分析的任务时。Bright Data提供了高速稳定的连接,这让我能够快速地完成工作。在实际使用中,我明显感觉到网页加载和数据抓取的速度非常快,减少了延迟和超时的情况。

  4. 灵活的计费与付款方式
    费用也是我选择网络代理平台时考虑的重要因素之一。与其他平台相比,Bright Data在计费方式上的灵活性实在是无与伦比。与其他那些固守固定计费模式的平台相比,Bright Data真正做到了为用户着想。它提供了按流量、按IP数量、按时间等多种计费方式,让我可以根据自己的实际需求来灵活调整。无论是短期的爆发式业务需求,还是长期的稳定使用,Bright Data都能提供恰到好处的计费方案,确保我只为自己真正使用的资源付费。这种灵活性让我能够更好地控制成本,同时也让我感受到了Bright Data对我需求的真实理解和支持。而且,Bright Data经常推出一些优惠活动,如注册即赠2美金试用金->立即试用<-,并且购买的动态IP享受5折优惠等。这些优惠活动为我节省了不少成本,提高了产品的性价比。

四、💫爬虫实战:使用亮数据代理ip爬取某汽车官方销售排行榜

目标网站:https://www.autohome.com.cn/
在这里插入图片描述

1.选择服务

这里我使用的是亮数据家的动态住宅代理,动态住宅代理是一种由互联网服务提供商(ISP)分配给用户的可自动更改IP地址的网络代理服务。它具高匿名性,因IP动态变化且来自真实住宅网络,能保护隐私;真实性强,可模拟真实用户环境;适用广泛,能满足不同业务场景需求。其工作原理是用户请求时,代理服务器从大量住宅IP池中分配可用IP并加密转发数据。

2.注册账号

首先打开->Bright Data官网<-,点击免费试用,输入邮箱(用来收取验证码)、微信、手机号,进行注册。
在这里插入图片描述
注册成功后,来到支付页面,会发现已经赠送2$的使用额度,有效期为3天,如下图:
在这里插入图片描述

3.使用动态住宅ip

点击左侧菜单中Proxies & Scraping,选择住宅代理,点击开始使用,如下图
在这里插入图片描述
进行一些简单的设置,通道名称、代理类型、以及指定国家的ip
在这里插入图片描述
添加成功后,参考代码语言选择Python,然后找到你的代理IP链接:如下图:
在这里插入图片描述

4.验证代理ip是否可用

import requests
import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


def get_html_json(url):
    """发送请求,获取响应"""
    # 请求头模拟浏览器
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.14 Safari/537.36'}

    proxies = {
        'http': '替换成你刚刚复制的链接',
        'https': '替换成你刚刚复制的链接'
    }

    # 添加请求头和代理IP发送请求
    response = requests.get(url, headers=headers, proxies=proxies, verify=False)
    # 获取网页源码
    if response.status_code == 200:
        # 解析JSON数据
        html_str = response.json()
        return html_str
    else:
        print('Failed to retrieve data', response.status_code)

print(get_html_json('https://httpbin.org/ip'))

连续执行两次后,发现输出的当前ip都是不一样的,代表可用,并且每次执行,使用的都是不同ip。
在这里插入图片描述

5.代码实战

构建新能源汽车销售榜url
定义了如下方法,其中部分参数是固定的,pagesize参数用来确定爬取的条数,date是确定爬取哪一个月的榜单。

def build_url(date,pagesize):
    """构建完整的URL"""
    base_url = "https://cars.app.autohome.com.cn/carext/recrank/all/getrecranklistpageresult2"
    params = {
        'from': 28,
        'pm': 2,
        'pluginversion': '11.65.0',
        'model': 1,
        'channel': 0,
        'pageindex': 1,
        'pagesize': pagesize,
        'typeid': 1,
        'subranktypeid': 1,
        'levelid': 201908,
        'price': '0-9000',
        'date': date
    }
    return requests.Request('GET', base_url, params=params).prepare().url

当我们通过url发起请求并获取响应后,获取的是json数据,我们需要提取出有用的数据。

"""提取需要的数据"""
def get_rec_rank(data):
    # 提取 list 数据
    list_data = data['result']['list']
    data_list = []
    for item in list_data:
        if isinstance(item, dict) and 'brandid' in item:
            # print(item)
            keys_to_extract = ['brandid', 'priceinfo', 'rank', 'seriesname', 'salecount', 'scorevalue', 'seriesid','seriesimage']

            # 使用字典推导式提取特定key
            extracted_data = {key: item[key] for key in keys_to_extract if key in item}
            print(extracted_data)

            data_list.append(extracted_data)
    return data_list

执行后,如下图,相关的数据都被提取出来了。
在这里插入图片描述
写入到excel,方便查看,定义如下方法:

def dict_list_to_excel(data_list, excel_file):
    # 将字典转换为DataFrame
    df = pd.DataFrame(data_list)

    # 将DataFrame写入到Excel文件
    df.to_excel(excel_file, index=False)

在这里插入图片描述
完整代码

import requests
import urllib3
import pandas as pd

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


def get_html_json(url):
    """发送请求,获取响应"""
    # 请求头模拟浏览器
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.14 Safari/537.36'}

    proxies = {
        'http': '替换成你刚刚复制的链接',
        'https': '替换成你刚刚复制的链接'
    }

    # 添加请求头和代理IP发送请求
    response = requests.get(url, headers=headers, proxies=proxies, verify=False)
    # 获取网页源码
    if response.status_code == 200:
        # 解析JSON数据
        html_str = response.json()
        return html_str
    else:
        print('Failed to retrieve data', response.status_code)

"""构建新能源汽车销售榜的url"""
def build_url(date,pagesize):
    """构建完整的URL"""
    base_url = "https://cars.app.autohome.com.cn/carext/recrank/all/getrecranklistpageresult2"
    params = {
        'from': 28,
        'pm': 2,
        'pluginversion': '11.65.0',
        'model': 1,
        'channel': 0,
        'pageindex': 1,
        'pagesize': pagesize,
        'typeid': 1,
        'subranktypeid': 1,
        'levelid': 201908,
        'price': '0-9000',
        'date': date
    }
    return requests.Request('GET', base_url, params=params).prepare().url


"""提取需要的数据"""
def get_rec_rank(data):
    # 提取 list 数据
    list_data = data['result']['list']
    data_list = []
    for item in list_data:
        if isinstance(item, dict) and 'brandid' in item:
            # print(item)
            keys_to_extract = ['brandid', 'priceinfo', 'rank', 'seriesname', 'salecount', 'scorevalue', 'seriesid','seriesimage']

            # 使用字典推导式提取特定key
            extracted_data = {key: item[key] for key in keys_to_extract if key in item}
            print(extracted_data)

            data_list.append(extracted_data)
    return data_list

"""写入到excel"""
def dict_list_to_excel(data_list, excel_file):
    # 将字典转换为DataFrame
    df = pd.DataFrame(data_list)

    # 将DataFrame写入到Excel文件
    df.to_excel(excel_file, index=False)


if __name__ == '__main__':
    # 设置需要爬取的月份
    date = '2025-01'
    # 设置爬取的条数
    pagesize = 100

    # 构建url,并发起请求
    data = get_html_json(build_url(date, pagesize))
    # 提取需要的数据数据
    data_list = get_rec_rank(data)
    print(data_list)
    # 写入excel
    dict_list_to_excel(data_list,'NewEnergySalesLeaderboard.xlsx')

    # 也可以通过seriesid进入到每个汽车的详情页面,获取每个汽车的更多详细信息

免责声明:本文爬虫内容仅供学习参考,对于阅读后进行爬虫行为的用户,不承担任何法律责任。

6.扩展

点击榜单上的某一台车,进入到该车的详情页面发现每一台车的url的构成只有一处不一样,跟我们上面爬取到的seriesid是一致的,所以我们可以根据seriesid依次爬取某一台车的详情页面的数据,比如配置信息、车型等,感兴趣的伙伴快去尝试下吧!
在这里插入图片描述

💫总结

代理IP对爬虫来说是不可或缺的,但在使用时必须遵守相关法律法规和目标网站的规定,严禁从事非法活动或滥用代理IP服务。亮数据家的动态住宅代理IP可以帮助爬虫安全采集公开数据信息,现在更是推出注册即送2美元的使用额度,以及限时5 折优惠,新老客户同享,有需要代理IP的小伙伴可以体验一下:Bright Data官网

投票🚗(传送门)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中央一号文件里的三维革命:数字孪生如何重构智慧乡村生态?

2024年中央一号文件提出"建设宜居宜业和美乡村"&#xff0c;这一目标背后离不开数字技术的支撑。在浙江某数字乡村试点&#xff0c;凡拓数创通过三维建模还原整村风貌&#xff0c;路灯能耗、垃圾分类、古建保护等数据在虚拟空间中实时跳动。管理人员坦言&#xff1a;…

P1149 [NOIP 2008 提高组] 火柴棒等式c/c++

P1149 [NOIP 2008 提高组] 火柴棒等式c/c 题目描述 给你 n 根火柴棍&#xff0c;你可以拼出多少个形如 ABC 的等式&#xff1f;等式中的 A、B、C 是用火柴棍拼出的整数&#xff08;若该数非零&#xff0c;则最高位不能是 0&#xff09;。用火柴棍拼数字 0∼9 的拼法如图所示&a…

【操作系统】同步与互斥

同步与互斥 一、同步与互斥的概念1.1 同步与异步1.2 进程互斥 二、进程互斥的实现2.1 软件实现2.1.1 单标志法2.1.2 双标志先检查法2.1.3 双标志后检查法2.1.4 Peterson法 2.2 硬件实现2.2.1 中断指令2.2.2 TestAndSet指令2.2.3 Swap指令 三、互斥锁四、信号量机制4.1 整型信号…

【SpringBoot】SpringBoot中分页插件(PageHelper)的使用

目录 1.分页概念 2.原生写法 3.PageHelper插件分页查询 3.1 介绍 3.2?使用 3.3 Page对象和PageInf对象 1.分页概念 用户查询的数据不可能一次性全部展示给用户&#xff08;如果用户有一万条数据呢&#xff09;&#xff0c;而是分页展示给用户&#xff0c;这就是分页查询…

php特性

文章目录 函数特性匹配数组报错进制转换绕过正则表达式匹配换行绝对路径绕过 弱类型语言隐式转换核心概念转换规则 运算符优先级 函数特性 匹配数组报错 以此为例&#xff0c;如果传入参数是一个数组&#xff0c;则preg_match()函数报错返回0&#xff0c;完成绕过&#xff0c;…

多通道数据采集和信号生成的模块化仪器如何重构飞机电子可靠性测试体系?

飞机的核心电子系统包括发电与配电系统&#xff0c;飞机内部所有设备和系统之间的内部数据通信系统&#xff0c;以及用于外部通信的射频设备。其他所有航空电子元件都依赖这些关键总线进行电力传输或数据通信。在本文中&#xff0c;我们将了解模块化仪器&#xff08;无论是PCIe…

如何在RedHat官网查询CVE漏洞信息

1.访问红帽&#xff08;Redhat&#xff09;官网 https://access.redhat.com/ 2.按照以下路径逐步访问 在官网导航栏中找到“Security”选项&#xff0c;点击进入后选择“Red Hat CVE Database” 3.搜索CVE漏洞编号 在页面的搜索框中输入具体的 CVE 漏洞编号&#xff0c;然后…

SpringCloud Gateway 集成 Sentinel 详解 及实现动态监听Nacos规则配置实时更新流控规则

目录 一、前言二、版本选择和适配 2.1、本文使用各组件版本2.2、官方推荐版本 三、部署sentinel-dashboard 3.1、下载 sentinel-dashboard jar包3.2、启动 sentinel-dashboard 四、Gateway 集成 Sentinel实现控制台配置流控规则测试 4.1、添加Gateway 集成 Sentinel 包4.2、添加…

星闪开发入门之常见报错整理(一)

系列文章目录 星闪开发入门之常见报错整理&#xff08;一&#xff09; 文章目录 系列文章目录前言一、ComX open fail, please check com is busy or not exist二、‌CMake下载失败三、配置文件出现语法错误四、路径过长导致编译报错五、ninja: build stopped: subcommand fai…

建筑兔零基础人工智能自学记录33|基础知识1

插入学习一下一些基础概念&#xff1a; 1、基本概念 人工智能&#xff1a;让机器像人一样思考。机器学习ML&#xff1a;计算机获取知识的过程。深度学习&#xff1a;机器的一种思考方式&#xff08;借助神经网络&#xff09;。 三者关系 2、机器学习的方式 监督学习&#x…

GPT-4.5 怎么样?如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作

GPT-4.5 怎么样&#xff1f;如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作 今天我们来说说上午发布的GPT-4.5&#xff0c;接下来我们说说GPT4.5到底如何&#xff0c;有哪些功能&#xff1f;有哪些性能提升&#xff1f;怎么快速使用到GPT-4.…

yolov8 目标追踪 (源码 +效果图)

1.在代码中 增加了s键开始追踪 e键结束追踪 显示移动距离(代码中可调标尺和像素的比值 以便接近实际距离) 2.绘制了监测区域 只在区域内的检测 3.规定了检测的类别 只有人类才绘制轨迹 import osimport cv2 from ultralytics import YOLO from collections import defaultdic…

Pytorch中的主要函数

目录 一、torch.manual_seed(seed)二、torch.cuda.manual_seed(seed)三、torch.rand(*size, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse)四、给大家写一个常用的自动选择电脑cuda 或者cpu 的小技巧五、torch.version.cuda&#xff1b;torch.bac…

PT2025 单触控双输出 LED 调光 IC

1. 产品概述 PT2025 是一款单键电容式触摸控制 ASIC &#xff0c;支持单通道触摸输入和单路 / 双路 PWM 输出&#xff0c;可 引脚配置 4 种模式。主要应用于触摸卫浴镜开关盒&#xff0c;具有介质自适应、高抗干扰、宽工作电压范 围、灯光无频闪、外围器件少的突出优…

Python基于机器学习的微博舆情情感分析系统,微博评论情感分析可视化系统(全新升级)

大家好&#xff0c;今天为大家带来的是Python基于机器学习的微博舆情情感分析系统&#xff0c;微博评论情感分析可视化系统&#xff0c;这个系统在原本的系统上进行优化升级。 算法从开源框架的 snlow &#xff0c;到支持机器学习的 lstm 算法可以手动输入语句&#xff0c;进行…

【02】Cocos游戏开发引擎从0开发一款游戏-cocos项目目录结构熟悉-调试运行项目-最重要的assets资源文件认识-场景sense了解-优雅草卓伊凡

【02】Cocos游戏开发引擎从0开发一款游戏-cocos项目目录结构熟悉-调试运行项目-最重要的assets资源文件认识-场景sense了解-优雅草卓伊凡 开发背景 接下来我们直接打开我们的项目开始进一步操作&#xff0c; 实战开发 导入项目 我把得到的项目解压到本地&#xff0c;我们开…

unity pico开发 三 移动 旋转 传送

文章目录 LocomtionSystem平滑移动转身碰撞体随相机改变身高传送添加射线两种传送区域TeleportationAreaTeleportationArea 美化传送射线 LocomtionSystem 在XR Origin上添加LocomtionSystem脚本&#xff0c;并拖拽XR Origin属性 这是移动的基础 平滑移动 在XR Origin上添加…

C语言整体梳理-基础篇-结构体

结构体详解 1.1结构体是什么&#xff1f; 结构体是一些值的集合&#xff0c;这些值成为成员变量&#xff0c;结构体的每个成员可以是不同类型的变量。 数组是相同类型的元素组成的集合&#xff0c;结构体可以是不同类型元素组成的集合。 1.2结构体的声明 1.2.1常规声明 s…

深度解读 AMS1117:从电气参数到应用电路的全面剖析

在电子设备的电源管理领域&#xff0c;线性稳压器扮演着至关重要的角色&#xff0c;而 AMS1117 凭借其出色的性能和广泛的适用性&#xff0c;成为众多工程师的热门选择。本文将依据相关资料&#xff0c;对 AMS1117 的特性、应用、电气参数等方面进行详细解读。 一、功能特性概…

LabVIEW中交叉关联算法

交叉关联算法通过统计多通道信号间的相关性&#xff0c;抑制各通道独立的本底噪声&#xff0c;保留共有的有效信号成分。其数学本质为对多个通道信号进行两两相乘并累加&#xff0c;最终通过归一化处理得到降噪后的输出信号。 这个VI演示了如何在LabVIEW中执行信号的互相关分析…