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

news/2025/2/26 12:44:25

本文目录

  • 💖前言
    • 一、💫代理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_42">四、💫爬虫实战:使用亮数据代理ip爬取某汽车官方销售排行榜

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

1.选择服务

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

2.注册账号

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

ip_52">3.使用动态住宅ip

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

ip_59">4.验证代理ip是否可用

python">import requests
import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


def get_html_json(url):
    iple-quoted-string string">"""发送请求,获取响应"""
    # 请求头模拟浏览器
    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是确定爬取哪一个月的榜单。

python">def build_url(date,pagesize):
    iple-quoted-string string">"""构建完整的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数据,我们需要提取出有用的数据。

python">iple-quoted-string string">"""提取需要的数据"""
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,方便查看,定义如下方法:

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

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

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

python">import requests
import urllib3
import pandas as pd

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


def get_html_json(url):
    iple-quoted-string string">"""发送请求,获取响应"""
    # 请求头模拟浏览器
    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)

iple-quoted-string string">"""构建新能源汽车销售榜的url"""
def build_url(date,pagesize):
    iple-quoted-string string">"""构建完整的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


iple-quoted-string string">"""提取需要的数据"""
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

iple-quoted-string string">"""写入到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官网

投票🚗(传送门)


http://www.niftyadmin.cn/n/5868711.html

相关文章

dubbo转http方式调用

业务背景&#xff1a;在当前项目下&#xff0c;所有前端请求均通过外层网关转发到后端这边的dubbo服务&#xff0c;现计划去掉网关层&#xff0c;由前端直接http调用后端dubbo。 解决方案&#xff1a;在前端调用方式不变的前提下&#xff0c;后端服务新建controller层&#xf…

安装TortoiseGit时,显示需要安装驱动?!

安装TortoiseGit时&#xff0c;显示需要安装驱动&#xff1f; 原因分析&#xff1a; 出现上述情况&#xff0c;单纯是被捆绑了&#xff0c;TortoiseGit是不需要任何插件 解决方案&#xff1a; 在电脑上选择应用Windows安装程序

VMware中的linux常用指令

常用 Linux 基础命令 文件与目录操作 ls&#xff1a;查看当前目录的文件和子目录&#xff0c;ls -a显示所有文件&#xff0c;包括隐藏文件。cd&#xff1a;切换目录&#xff0c;如 **cd ~** 切换到个人家目录。pwd&#xff1a;查看当前目录。mkdir&#xff1a;创建文件夹&#…

DeepSeek在金融银行的应用方案

1. 引言 随着金融科技的迅猛发展&#xff0c;传统金融银行业面临着前所未有的挑战与机遇。数字化转型已成为金融银行业提升效率、优化客户体验、增强竞争力的必由之路。在这一背景下&#xff0c;DeepSeek作为一款先进的智能解决方案&#xff0c;凭借其强大的数据分析能力、智能…

python-leetcode-字符串解码

394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; class Solution:def decodeString(self, s: str) -> str:stack []num 0curr_str ""for char in s:if char.isdigit():num num * 10 int(char)elif char [:stack.append((curr_str, num))curr_str, …

Python驱动的餐饮企业智能数据分析:从数据清洗到可视化决策全流程实战

文章目录 Python驱动的餐饮企业智能数据分析:从数据清洗到可视化决策全流程实战引言一、案例背景1.1 需求分析1.2 数据准备1.2.1 模拟数据生成代码二、数据处理全流程2.1 数据清洗2.1.1 缺失值处理2.1.2 异常值检测2.2 核心指标计算2.2.1 营业额分析2.2.2 门店表现评估2.2.3 菜…

Docker 部署 Graylog 日志管理系统

Docker 部署 Graylog 日志管理系统 前言一、准备工作二、Docker Compose 配置三、启动 Graylog 服务四、访问 Graylog Web 界面总结 前言 Graylog 是一个开源的日志管理平台&#xff0c;专为实时日志收集、分析和可视化设计。它支持强大的搜索功能&#xff0c;并且与 Elastics…

智能升级、安全加倍,遨游防爆对讲机拉起通信安防线

在充斥着爆炸性气体和易燃物质的危险作业环境中&#xff0c;通信设备的选择关乎生命安全。一旦通信设备引发电火花&#xff0c;其后果将不堪设想。因此&#xff0c;专为防范易燃易爆环境而设计的防爆对讲机&#xff0c;凭借其独特的防爆技术和设计&#xff0c;成为了这些高风险…