数据采集介绍_数据收集的五种方法

数据采集介绍_数据收集的五种方法1. 概述 现在学校越来越重视孩子课外知识的掌握,给孩子挑选课外书一般都是参考学校或者家长之间的推荐。 有时,也会想看看在儿童阶段,目前到底流行的是些什么样的书。 ​ 于是,就简单写了这个小爬虫,采集

数据采集实战(五)-

1. 概述

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

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

2. 采集流程

因为当当网的图书排名不需要登录就可以查看,而且采集前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

3. 总结

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

4. 注意事项

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5646.html

(0)
上一篇 2023-04-30
下一篇 2023-04-30

相关推荐

  • redis安装-单节点[通俗易懂]

    redis安装-单节点[通俗易懂]linux安装步骤 yum -y install gcc automake autoconf libtool make 解压redis压缩包 tar -zxvf redis-5.0.7.tar.gz…

    2023-02-21
    152
  • 初中英语教学反思「建议收藏」

    初中英语教学反思「建议收藏」随着时代的发展和社会的进步,英语学习、英语教学越来越受到人们的普遍重视,初中英语教学反思。英语已从一种工具变成了一种思想,一种知识库。没有掌握英语犹如缺乏一种思想,缺少了一个重要的知识源泉。掌握了一…

    2022-12-25
    146
  • mongodb connector_计算机网络传输介质性能最好

    mongodb connector_计算机网络传输介质性能最好关于作者 OPPO数据库团队负责人,一直专注于分布式缓存、高性能服务器、数据库、中间件等相关研发,后续会持续分享《MongoDB内核源码设计及性能调优实践》。Github账号地址: https://…

    2023-03-06
    138
  • Linux下重新设置 MySQL 的密码

    Linux下重新设置 MySQL 的密码1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下: #vim /etc/my.cnf(注:windows下修改的是my.ini) 很多老铁,在开始时设置了 MySQL 的密码,后来一段时

    2023-03-11
    149
  • ol7.7安装部署4节点spark3.0.0分布式集群

    ol7.7安装部署4节点spark3.0.0分布式集群为学习spark,虚拟机中开4台虚拟机安装spark3.0.0底层hadoop集群已经安装好,见ol7.7安装部署4节点hadoop 3.2.1分布式集群学习环境首先,去http://spark.ap

    2023-03-19
    145
  • python成长之对象篇(Python对象)

    python成长之对象篇(Python对象)在Python中,一切目标都共有一些特性,这些特性界说在PyObject中。PyObject界说在Include/object.h中:#definePyObject_HEAD\

    2023-10-31
    137
  • 用Python的Tkinter模块创建GUI窗口

    用Python的Tkinter模块创建GUI窗口图形用户界面(Graphical User Interface, GUI)是现代计算机上最流行的应用程序类型之一。它提供了一种直观和易于使用的界面,可以帮助用户更好地与计算机交互和控制应用程序。Python是一个强大的编程语言,它支持多种GUI工具包,其中Tkinter是一个Python标准库,它提供了创建GUI应用程序的基本工具。在本文中,我们将详细讨论使用Python的Tkinter模块创建GUI窗口的方法,从而帮助您掌握它。

    2024-02-25
    115
  • ClickHouse(08)ClickHouse表引擎概况「终于解决」

    ClickHouse(08)ClickHouse表引擎概况「终于解决」目前ClickHouse的表引擎主要有下面四个系列,合并树家族、日志引擎系列、集成的表引擎和其他特殊的引擎。 #合并树家族 Clickhouse中最强大的表引擎当属MergeTree(合并树)引擎及该

    2023-06-12
    147

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注