我的编程空间,编程开发者的网络收藏夹
学习永远不晚

数据采集实战(五)-

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

数据采集实战(五)-

数据采集实战(五)-

现在学校越来越重视孩子课外知识的掌握,给孩子挑选课外书一般都是参考学校或者家长之间的推荐。
有时,也会想看看在儿童阶段,目前到底流行的是些什么样的书。

于是,就简单写了这个小爬虫,采集了畅销童书的前20名。
要想采集更多的畅销童书,后者采集其他类型的畅销书,调整相应的参数和URL就可以了。

因为当当网的图书排名不需要登录就可以查看,而且采集前20名也不需要翻页,所以流程很简单,打开网页直接解析保存就可以了。

核心代码如下:

import { saveContent } from "../utils.js";

const http_prefix = "http://bang.dangdang.com/books/childrensbooks";

const age_start = 1;
const age_end = 4;
const month_start = 1;
const month_end = 11; // 目前只到11月

const age_map = { 1: "0~2岁", 2: "3~6岁", 3: "7~10岁", 4: "11~14岁" };

const childrensbooks = async (page) => {
    // 0~2岁, 3~6岁,7~10岁,11~14岁
    for (let i = age_start; i <= age_end; i++) {
        for (let m = month_start; m <= month_end; m++) {
            let url = `${http_prefix}/01.41.0${i}.00.00.00-month-2021-${m}-1-1-bestsell`;
            const lines = await parseData(page, url);

            // 分年龄段分月份写入csv
            await saveContent(
                `./output/dangdang-childrenbook`,
                `2021-${m}-${age_map[i]}.csv`,
                lines.join("
")
            );
        }
    }
};

// 采集字段: 排名order,书名name,评论数comment,推荐率recommend_pct,作者author,出版日期publish_date,出版社publisher
const parseData = async (page, url) => {
    await page.goto(url);

    const listContent = await page.$$("ul.bang_list>li");
    let lines = [
        "排名order,书名name,评论数comment,推荐率recommend_pct,作者author,出版日期publish_date,出版社publisher",
    ];
    for (let i = 0; i < listContent.length; i++) {
        const order = await listContent[i].$eval(
            "div.list_num",
            (node) => node.innerText
        );

        const name = await listContent[i].$eval(
            "div.name>a",
            (node) => node.innerText
        );
        const comment = await listContent[i].$eval(
            "div.star>a",
            (node) => node.innerText
        );
        const recommend_pct = await listContent[i].$eval(
            "div.star>span.tuijian",
            (node) => node.innerText
        );
        const publisher_info = await listContent[i].$$("div.publisher_info");
        const authors = await publisher_info[0].$$eval("a", (nodes) =>
            nodes.map((node) => node.innerText)
        );

        const author = authors.join("&");
        const publish_date = await publisher_info[1].$eval(
            "span",
            (node) => node.innerText
        );
        const publisher = await publisher_info[1].$eval(
            "a",
            (node) => node.innerText
        );

        const line = `${order},${name},${comment},${recommend_pct},${author},${publish_date},${publisher}`;
        lines.push(line);
        console.log(line);
    }

    return lines;
};

export default childrensbooks;

采集之后的内容分门别类的按照月份和年龄阶段保存的。
image.png

文件的内容是csv格式的(下图是其中部分字段)。
image.png

以上内容是通过 puppeteer 采集的,除了童书排行榜,还有图书畅销榜,新书热卖榜,图书飙升榜,特价榜,五星图书榜等等。
各个榜单的结构都类似,只需要修改上面代码中的 http_prefix,以及童书年龄阶段的循环控制等,就能采集相应数据。

爬取数据只是为了研究学习使用,本文中的代码遵守:

  1. 如果网站有 robots.txt,遵循其中的约定
  2. 爬取速度模拟正常访问的速率,不增加服务器的负担
  3. 只获取完全公开的数据,有可能涉及隐私的数据绝对不碰

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

数据采集实战(五)-

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

数据采集实战(五)-

1. 概述现在学校越来越重视孩子课外知识的掌握,给孩子挑选课外书一般都是参考学校或者家长之间的推荐。有时,也会想看看在儿童阶段,目前到底流行的是些什么样的书。​于是,就简单写了这个小爬虫,采集了畅销童书的前20名。要想采集更多的畅销童书,后者采集其他类型的畅销
数据采集实战(五)-
2015-05-29

数据采集实战(一)-

概述最近在学习python的各种数据分析库,为了尝试各种库中各种分析算法的效果,陆陆续续爬取了一些真实的数据来。顺便也练习练习爬虫,踩了不少坑,后续将采集的经验逐步分享出来,希望能给后来者一些参考,也希望能够得到先驱者的指点!采集工具其实基本没用过什么现成的采
数据采集实战(一)-
2017-02-11

数据采集实战(三)-

1. 概述王者荣耀是一直都挺喜欢的一个手游,玩了好几年,最近一段开始喜欢看比赛,所以想着采集点数据看看各个战队或者选手的情况。顺便也练习练习 puppeteer 的使用。数据来源于:尚牛电竞 。2. 采集流程王者荣耀最近正在进行的最大比赛就是 2021世冠杯,
数据采集实战(三)-
2020-07-29

数据采集实战(二)-

1. 概述京粉(https://union.jd.com/)是京东联盟下的网站,通过分享其中的商品链接可以赚取佣金,类似淘客联盟。采集京粉的商品,既可以练习 puppeteer的使用,平时想在京东购物时,也能用得上(采集看看有类似商品的价格和评价)。2. 主要
数据采集实战(二)-
2015-01-09

数据采集实战(四)-

1. 概述前段时间在看一本很多人推荐的线性代数教材《线性代数应该这样学》第三版,这一版每个章节都有大量的习题。官方网站上虽然按照章节提供了习题的答案,一来因为网站是国外的,访问不流畅,二来答案中还夹杂着广告,影响查看。所以,想试着将答案爬取下来制作成pdf,查
数据采集实战(四)-
2019-04-29

Python采集C站热榜数据实战示例

这篇文章主要为大家介绍了Python采集C站热榜数据实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-19

Python实战使用XPath采集数据示例解析

这篇文章主要为大家介绍了Python实战之使用XPath采集数据实现示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
2023-05-16

数据采集的五种方法有哪些

数据采集的五种方法有:1.实地调查:直接走访或观察目标群体、地点或事件,收集数据。2.问卷调查:通过设计并分发问卷,收集被调查者对特定问题或主题的意见和观点。3.访谈调查:面对面或通过电话、视频等方式与被调查者进行深入交谈,了解他们的观点、
2023-08-24

如何在 Java 中实现 Modbus 数据采集?(java怎么实现modbus数据采集)

在Java开发中,实现Modbus数据采集是一个常见的需求。Modbus是一种用于工业自动化领域的通信协议,它允许不同设备之间进行数据交换。以下是实现Java中Modbus数据采集的步骤:一、准备工作
如何在 Java 中实现 Modbus 数据采集?(java怎么实现modbus数据采集)
Java2024-12-18

数据采集 - Marvin

链接:https://bdcc.bigdataedu.org/block/48(需账号登录)
数据采集 - Marvin
2016-08-03

sqlserver实时数据采集怎么实现

在 SQL Server 中实现实时数据采集可以通过以下几种方法来实现:使用 Change Data Capture (CDC):SQL Server 提供了 CDC 功能,可以捕获数据库表中的更改,并将这些更改存储在 CDC 控制表中。通
sqlserver实时数据采集怎么实现
2024-04-09

实战:基于Loki采集K8s日志

Loki是一个水平可扩展、高可用性、轻量易用、多租户的日志聚合系统,它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每一个日志流编制一组标签,项目是受Prometheus启发,专门为Prometheus和k8s用户做了相
K8s日志系统2024-11-30

剖析数据的数据采集

如果大家还想了解更多方面的详细内容的话呢,不妨关注编程学习网教育平台,在这里你肯定会有意想不到的收获的!
剖析数据的数据采集
2024-04-23

Hive实战之Youtube数据集

Hive是一个基于Hadoop的数据仓库基础设施,可以用于处理大规模的结构化数据。在Hive中,使用类似SQL的查询语言来处理数据,使得用户可以方便地进行数据分析和查询。在本实战中,我们将使用Hive来处理Youtube数据集。Youtub
2023-09-15

编程热搜

目录