Tampermonkey油猴脚本案例:自定义UI交互实现更多页数据抓取

引言

在网络信息日益丰富的今天,数据抓取技术越来越受到开发者们的青睐。Tampermonkey是一个非常流行的浏览器扩展,它能够帮助用户编写用户脚本以修改网页的行为和外观。本文将通过一个案例,讲解如何使用Tampermonkey编写一个能够实现自定义UI交互并抓取多个页面数据的脚本。

脚本功能概述

本例中,我们将编写一个Tampermonkey脚本,它从一个示例网站(假设为一个商品列表页)抓取商品信息,并提供一个简单的UI界面让用户选择抓取的数据页数。

步骤一:安装Tampermonkey

首先,你需要在浏览器中安装Tampermonkey扩展程序。在Chrome、Firefox、或Edge等浏览器的扩展商店中都能找到它。

步骤二:编写脚本

在Tampermonkey中创建一个新的脚本,并输入以下代码:

// ==UserScript==
// @name         商品数据抓取
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  抓取商品数据并提供UI交互
// @author       学习者
// @match        https://example.com/products
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // UI组件的创建
    const createUI = () => {
        const container = document.createElement('div');
        container.style.position = 'fixed';
        container.style.top = '10px';
        container.style.right = '10px';
        container.style.backgroundColor = 'white';
        container.style.padding = '10px';
        container.style.border = '1px solid #ccc';
        container.style.zIndex = 9999;

        const input = document.createElement('input');
        input.type = 'number';
        input.placeholder = '输入页数';
        container.appendChild(input);

        const button = document.createElement('button');
        button.innerText = '抓取数据';
        button.onclick = () => {
            const pageCount = parseInt(input.value) || 1;
            fetchData(pageCount);
        };
        container.appendChild(button);

        document.body.appendChild(container);
    };

    // 抓取数据的函数
    const fetchData = async (pageCount) => {
        for (let i = 1; i <= pageCount; i++) {
            const response = await fetch(`https://example.com/products?page=${i}`);
            const text = await response.text();
            const parser = new DOMParser();
            const doc = parser.parseFromString(text, 'text/html');

            // 假设每个商品信息在 .product-item 下
            const products = doc.querySelectorAll('.product-item');
            products.forEach(product => {
                const title = product.querySelector('.product-title').innerText;
                const price = product.querySelector('.product-price').innerText;
                console.log(`商品名称: ${title}, 商品价格: ${price}`);
            });
        }
        alert(`成功抓取 ${pageCount} 页数据!`);
    };

    // 初始化UI
    createUI();
})();

步骤三:脚本解析

  1. 脚本声明部分:通过// ==UserScript==// ==/UserScript==之间的内容来声明脚本的基本信息和匹配的URL。

  2. 创建UIcreateUI()函数用于创建一个简单的用户界面,包含一个输入框和一个按钮。用户可以在输入框中输入想要抓取的页数,点击按钮后就会调用fetchData()函数。

  3. 抓取数据fetchData()函数接受页数参数,使用fetch API抓取指定页面的数据。这里以fetch请求的形式模拟用户浏览网页,解析获取到的HTML,并提取商品信息(例如商品名称和价格)。

  4. 提取与输出:通过DOM解析,获取每个商品的相关信息,并打印到控制台,最后通过alert告知用户抓取的页数。

结论

通过这个Tampermonkey脚本示例,我们实现了一个简单的自定义UI交互,让用户能够轻松输入参数并抓取多个页面的数据。虽然这个例子非常基础,但它展示了Web爬虫的基本原理和使用方法。可以根据实际需求进行扩展,比如将抓取的数据保存到本地文件、或者通过其他方式进行处理。

请注意,抓取网站数据时要遵循网站的使用条款和Robots.txt规则,以免侵犯版权或造成不可预见的后果。希望本文能对您理解Tampermonkey脚本的编写和Web数据抓取有所帮助!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部