Nodejs 页面中代码是<td>@mainIn@</td>的价格数据如何提取?

Nodejs 页面中代码是<td>@mainIn@</td>的价格数据如何提取?

问题说明白点,这样没人知道你想要什么?

你如果想直接获取页面上的值,直接jquery不行吗?

10 回复

当然可以!为了帮助你更好地理解如何从HTML页面中提取特定的数据(例如 <td>@mainIn@</td> 中的价格数据),我们可以使用Node.js结合一些库来实现。通常情况下,我们会使用axios来发送HTTP请求获取页面内容,然后用cheerio来解析HTML并提取所需的信息。

示例代码

首先,确保你已经安装了必要的依赖包:

npm install axios cheerio

然后,你可以创建一个简单的Node.js脚本来提取价格数据:

const axios = require('axios');
const cheerio = require('cheerio');

async function fetchPriceData(url) {
    try {
        // 发送HTTP请求获取网页内容
        const response = await axios.get(url);
        const html = response.data;

        // 使用cheerio加载HTML文档
        const $ = cheerio.load(html);

        // 查找包含价格的 <td> 元素
        const priceElement = $('td:contains("@mainIn@")').first();

        if (priceElement.length > 0) {
            // 提取文本内容
            const priceText = priceElement.text().replace('@mainIn@', '').trim();
            console.log('Extracted Price:', priceText);
        } else {
            console.log('Price element not found.');
        }
    } catch (error) {
        console.error('Error fetching or parsing the page:', error);
    }
}

// 调用函数并传入目标URL
fetchPriceData('http://example.com/page-with-prices');

解释

  1. 安装依赖

    • axios:用于发送HTTP请求。
    • cheerio:用于解析HTML并提供类似jQuery的功能。
  2. 发送HTTP请求

    • 使用axios.get()方法获取指定URL的HTML内容。
  3. 解析HTML

    • 使用cheerio.load()加载HTML内容,并通过jQuery选择器语法进行查询。
  4. 查找并提取数据

    • 使用:contains()选择器找到包含特定文本(如@mainIn@)的<td>元素。
    • 提取该元素的文本内容,并去除掉@mainIn@标记,最终输出价格数据。

这种方法可以帮助你在Node.js环境中有效地提取HTML中的数据。希望这能解决你的问题!


页面中的《td》…《/td》之间的信息不是具体数值,而是模版变量。用抓取程序读取的结果是:《td》[@mainIn](/user/mainIn)@《/td》,而不是具体数值(比如:《td》95.05《\td》),应该是页面中js程序用ajax方式替换[@mainIn](/user/mainIn)@为95.05。

我如何才能找到[@mainIn](/user/mainIn)@替换方法和数值源头,具体例子请看这个页面的代码:http://finance.sina.com.cn/realstock/company/sz300228/nc.shtml

var reg = /<td>(\d+(?:.\d+)?)</td>/ig; var str = ‘<td>100.10</td><td>1123</td>’; var match = null; while((match = reg.exec(str)) != null) { console.log(match); }

尼玛… 把格式全部都干掉了… 无法正常回复啊…

<code> var reg = /<td>(\d+(?:.\d+)?)</td>/ig; var str = ‘<td>100.10</td><td>1123</td>’; var match = null; while((match = reg.exec(str)) != null) { console.log(match); } </code>

<pre> var reg = /<td>(\d+(?:.\d+)?)</td>/ig; var str = ‘<td>100.10</td><td>1123</td>’; var match = null; while((match = reg.exec(str)) != null) { console.log(match); } </pre>

var reg = /&lt;td&gt;(\d+(?:.\d+)?)&lt;/td&gt;/ig; var str = ‘&lt;td&gt;100.10&lt;/td&gt;&lt;td&gt;1234&lt;/td&gt;’; var match = null; while((match = reg.exec(str)) != null) { console.log(match); }

尼玛啊 我放弃了…

这是个问题,你给的这个链接在请求的时候还没有数据,数据是后来加载上去的,就算你请求这个链接也是没有数据的,所以这还真是个问题,我也想知道怎么解决这个问题?

要从HTML页面中提取<td>@mainIn@</td>标签内的价格数据,可以使用Node.js中的cheerio库。Cheerio是一个用于服务器端解析HTML的轻量级库,它的API与jQuery非常相似。

假设你有一个包含以下HTML结构的页面:

<table>
    <tr>
        <td>@mainIn@</td>
        <td>100.00</td>
    </tr>
</table>

你可以使用以下步骤来提取价格数据:

  1. 安装cheerio库:

    npm install cheerio
    
  2. 编写Node.js脚本以提取数据:

    const cheerio = require('cheerio');
    const html = `
        <table>
            <tr>
                <td>@mainIn@</td>
                <td>100.00</td>
            </tr>
        </table>
    `;
    
    // 加载HTML文档
    const $ = cheerio.load(html);
    
    // 提取价格数据
    const price = $('td').eq(1).text(); // 获取第二个<td>标签内的文本
    console.log(price); // 输出: 100.00
    

在这个例子中,我们首先加载了包含HTML结构的字符串,然后使用cheerio选择器来定位并提取价格数据。$('td').eq(1)选择了第二个<td>标签,并通过.text()方法获取其内容。

如果你需要从实际的网页中抓取数据,可以结合axiosnode-fetch库来获取HTML内容,然后再用cheerio解析。

回到顶部