首页 > 其他分享 >双十一购物攻略:如何利用爬虫技术获取历史价格趋势,理性购物不踩雷

双十一购物攻略:如何利用爬虫技术获取历史价格趋势,理性购物不踩雷

时间:2024-11-12 08:50:44浏览次数:1  
标签:name price 购物 爬虫 tag params 攻略 div 价格

双十一购物狂欢节即将到来,作为程序员,利用爬虫技术查询商品的历史价格趋势,似乎是一个合理的需求,毕竟这只是为了自己参考,不涉及商业用途。然而,小伙伴们在进行爬虫操作时一定要谨慎小心,尤其是在数据采集和使用的过程中,务必遵守相关法律法规与平台的使用规范。

每次和大家讲解爬虫时,我总是提醒一句:“谨慎、谨慎、再谨慎!”不仅要避免触犯法律,也要避免对网站的正常运营造成影响,保持理性和合规。

商品获取

好的,我们的第一步是进入京东的查询页面,找到并打开我们关注的商品页面。例如,假设我最关注的是显卡的价格和相关数据,那么接下来我就会去查询显卡的具体信息。通过这种方式,我们能够获取到显卡的相关商品数据。如图:

image

你要做的工作是找到我们的商品信息请求连接。这个连接可能不好找,所以你需要耐心地逐个查看相关页面。我已经帮你找到这个连接了,现在我们可以直接根据它开始编写爬虫脚本,目标是从中提取商品链接。你可以通过右键点击请求,选择“复制请求为Python代码”来直接获取Python代码。

至于在线工具,市场上有很多类似的工具可以帮助你转换请求,但我就不一一列举了,你可以根据需求自行选择合适的工具。

代码部分你可以自己编写,我这里只会提供一些关键部分的示例代码,帮助你更好地理解如何实现。以下是我为你整理的关键代码片段:

response = requests.get('https://api.m.jd.com/', params=params, cookies=cookies, headers=headers)
    # 使用BeautifulSoup解析HTML
    soup = BeautifulSoup(response.text, 'html.parser')

    # 查找所有符合条件的div标签
    div_tags = soup.find_all('div', class_='p-name p-name-type-2')

    # 循环遍历每个div标签,提取信息
    for div_tag in div_tags:
        # 查找 span 标签中是否有 "自营" 标识
        self_operated_tag = div_tag.find('span', class_='p-tag')
        
        if self_operated_tag and '自营' in self_operated_tag.text:
            # 提取显卡名称和链接
            a_tag = div_tag.find('a', href=True)
            product_name = a_tag.find('em').text.strip()
            
            # 处理相对路径,拼接为完整的URL
            link = 'https:' + a_tag['href'] if a_tag['href'].startswith('//') else a_tag['href']
            store.append({
                'name': product_name,
                'link': link
            })
            # 打印结果
            print("名称:", product_name)
            print("链接:", link)
        else:
            print("没有找到自营标识或没有相关信息。")
    
    sort_data(store,keyword)
    
def sort_data(data,name):
    with open(name+'.csv','a',newline='',encoding='utf8')as f:
        writer=csv.writer(f)
        for i in data:
            writer.writerow((i['name'],i['link']))

这里我们只关注自营商品,因为自营商品的品质相对有保障。为了避免频繁爬取导致封号的风险,我将爬取到的数据存储到了CSV文件中,便于后续使用。毕竟,不建议频繁地向同一网站发起请求,这样很容易被封禁。

以下是我爬取的某一页的数据示例。如果你需要获取多个页面的数据,只需调整相关参数即可,确保分页功能正常工作。爬取的示例数据如下所示:

image

没错,我并没有爬取商品的实时价格,因为我们这次的主要目标是获取历史价格数据。不过,在抓取历史价格的同时,顺便也爬取了商品的最新价格,这样既能满足需求,又不会浪费额外的爬取时间。因此,当前的代码已经覆盖了这两方面的内容。

接下来,我们可以转到另一个网站,看看它的数据结构和爬取方式,以便进行比较和优化。

历史价格爬取

在成功获取完当前网站的数据后,我们将转向爬取另一个网站的数据。首先,为了确保能够顺利抓取到所需的历史价格信息,我们需要在Web端进行一些初步的测试。通过手动操作和分析网络请求,我确认了能够获取历史价格数据的请求接口。

经过一番测试和调试后,我成功找到了正确的请求连接。接下来,我将展示这个连接,供大家参考。如下所示:

image

我们计划逐步抓取每一个商品链接的历史价格信息,以确保数据的全面性和准确性。然而,在抓取过程中,我注意到请求的内容中包含了一个加密部分,这使得我们无法直接获取到完整的价格数据。这一加密内容需要解密或进一步处理,才能确保我们能够成功提取出历史价格。

因此,在继续抓取之前,我们需要先分析并处理这个加密机制。以下是加密部分的内容,供参考:

image

在这个请求过程中,使用的并不是商品的直接链接,而是一个经过加密处理的“code”参数。实际上,商品链接在上面的请求中已经经历了一定的转换处理,因此我们无需过于担心这个转换步骤,它只是多了一道处理环节而已,对数据获取本身没有实质性影响。

我们只需要按照指定的方式获取这个“code”参数,并在后续请求中正确使用它即可。经过一系列分析和处理,最终的代码实现如下所示:

def get_history(itemid):
    #此处省略一堆代码
    params = {
        'ud': 'EAONJNRXWXSMTBKNNYL_1730899204',
        'reqid': '46db0db9f67129f31d1fca1f96ed4239',
        'checkCode': 'ada35e4f5d7c1c55403289ec49df69e3P9f1',
        'con': itemid,
    }

    data = {
        'checkCode': 'ada35e4f5d7c1c55403289ec49df69e3P9f1',
        'con': itemid,
    }

    response = requests.post('http://www.tool168.cn/dm/ptinfo.php', params=params, cookies=cookies, headers=headers, data=data, verify=False)
    
    #此处省略一堆代码

    code =   json.loads(response.text)
    params = {
        'code': code['code'],
        't': '',
        'ud': 'EAONJNRXWXSMTBKNNYL_1730899204',
        'reqid': '46db0db9f67129f31d1fca1f96ed4239',
    }

    response = requests.post('http://www.tool168.cn/dm/history.php', params=params, cookies=cookies, headers=headers, verify=False)
    # 正则表达式匹配Date.UTC中的日期和价格
    pattern = r"Date.UTC\((\d{4}),(\d{1,2}),(\d{1,2})\),([\d\.]+)"

    matches = re.findall(pattern, response.text)

    # 解析日期和价格
    prices = []
    for match in matches:
        year, month, day, price = match
        date = datetime(int(year), int(month) + 1, int(day))  # 月份是从0开始的,需要加1
        prices.append((date, float(price)))

    # 找出最低价格、最高价格和最新价格
    min_price = min(prices, key=lambda x: x[1])
    max_price = max(prices, key=lambda x: x[1])
    latest_price = prices[-1]

    # 打印结果
    print(f"最低价格: {min_price[1]},日期: {min_price[0].strftime('%Y-%m-%d')}")
    print(f"最高价格: {max_price[1]},日期: {max_price[0].strftime('%Y-%m-%d')}")
    print(f"最新价格: {latest_price[1]},日期: {latest_price[0].strftime('%Y-%m-%d')}")
    
get_history("https://item.jd.com/100061261651.html")    

最后,通过对获取到的历史价格数据进行分析,我们可以基于价格的波动趋势做出合理的购买判断!看下最终的效果:

image

剩下的工作就是对代码进行优化的过程了。在这个阶段,我们的主要目标是展示一个基本的实现思路,并且验证相关功能是否有效。实际上,我们并不打算爬取所有商品的详细信息,因为这不仅不符合我们的实际需求,而且在实际操作中也没有必要。

总结

总的来说,爬虫技术为我们提供了丰富的数据资源,但在使用过程中,谨慎行事,理性操作,才能真正让爬虫技术为我们的生活带来便利,而不是带来麻烦。希望大家在即将到来的双十一购物狂欢节中,既能抓住机会购买心仪的商品,又能遵守道德与法律的底线,做一个负责任的技术使用者。


我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。

标签:name,price,购物,爬虫,tag,params,攻略,div,价格
From: https://www.cnblogs.com/guoxiaoyu/p/18531125

相关文章

  • 腾讯云双十一攻略篇:个人应该怎么买服务器
    文章目录前言个人对于服务器的需求个人网站/博客学习与实验应用开发与测试服务器推荐轻量应用服务器·限时秒杀同价续费双人拼团赢大礼活动地址个人简介前言每年双十一,腾讯云都会推出各类精彩纷呈、花样繁多活动,让个人用户有机会以优惠的价格获取高性能云服务。......
  • 文本批量处理不求人:化繁为简全攻略 (系列一)
    在日常工作中,我们经常需要对一些文本文档进行批量操作或者对某一个文档进行繁琐操作,虽然windows系统自带的记事本自带批量替换修改内容的功能,但仅这一个功能往往不够,比如以下一些场景,用记事本就很难实现我们的目标。场景一:在IT行业中,聊天机器人是一种利用自然语言处理技术与......
  • 腾讯云双十一重磅优惠来袭,带你掌握最强攻略密码
    1.腾讯云双十一上云拼团GO在当今数字化飞速发展的时代,云服务器已经成为了众多企业和开发者的得力助手,特别是人工智能的发展,为云计算平台带来了更为智能的数据处理与分析能力。云服务器将能够更好地支持人工智能模型的训练和部署,为各行各业的智能化转型提供更强大的技术支持,云......
  • 如何保存抖音的图片和文案【一键攻略】
    如何保存抖音的图片和文案【小白攻略】作为自媒体创作者或营销从业者,大家经常会刷到一些创意满满的素材,或者令人耳目一新的文案。然而,收藏后过一段时间发现很多图片和文案都消失了,无法再下载或使用。这时候,如何方便地保存这些素材成了一个棘手的问题。今天就来分享一款简单易......
  • # Playwright爬虫(.net)介绍:1 简介
    Playwright是一个由Microsoft开发的开源工具,用于自动化Web浏览器的测试和操作。它提供了一种跨浏览器、跨平台的自动化解决方案,可以在Chromium、FireFox、微软Edge等多种浏览器上进行测试和操作。如果你曾经使用过Selenium,那么我可以告诉你,Playwright的用途与Selenium非常类似,可......
  • Playwright爬虫(.net)介绍:2 安装及第一个应用程序
    Playwright的安装比较简单,只需要使用命令行输入几行命令就可以完成。由于本系统主要通过MicrosoftVisualStudioCommunity2022及C#进行记录,因此在安装Playwright前需要自行完成相关开发环境的搭建。1.运行PowerShell,并定位到某个目录中。2.输入如下命令,新建一个mstest项目:do......
  • PHP爬虫:精准获取京东商品SKU信息
    在电商领域,商品的SKU(StockKeepingUnit)信息至关重要,它不仅是库存管理的基础,也是数据分析的关键。京东作为中国最大的电商平台之一,拥有海量的商品数据。本文将介绍如何使用PHP编写爬虫,精准获取京东商品的SKU信息。1.了解京东商品页面结构在编写爬虫之前,我们需要了解京东商品......
  • Java爬虫:京东商品SKU信息的“偷心盗贼”
    在这个信息爆炸的时代,数据就像是藏在深山里的宝藏,等待着我们这些“数据探险家”去发掘。今天,我们要化身为一名“偷心盗贼”,用Java这把锋利的“剑”,精准地从京东的海洋中窃取商品的SKU信息。别担心,我们这是合法的“盗窃”,因为我们只是在学习如何用代码与网页对话。环境准备:装......
  • Java爬虫精准获得JD商品SKU信息
    在数字化时代,数据的价值日益凸显,尤其是在电商领域。通过爬虫技术,我们可以从网站中提取有价值的信息,用于市场分析、价格监控等。Java作为一种成熟且功能强大的编程语言,拥有丰富的库支持,使其成为编写爬虫的理想选择。本文将详细介绍如何使用Java编写爬虫,以精准获取京东(JD)商品的详......
  • 2024年Java后端开发最全面试攻略,不管你工作几年,都得看看
    互联网公司的面试,从形式上说,一般分为2~3轮技术面+1轮HR面,不过某些公司没有HR面试。在技术面试中,面试官一般会就你所应聘的岗位进行相关知识的考察,也叫基础知识和业务逻辑面试,只要回答的不是特别差,面试官通常会继续跟你聊聊项目,这个时候就开始了项目面试。也就是说,技......