在NodeJS

时间:2017-01-22 18:24:54

标签: node.js web-scraping

我正试图从服务器端点击一下。

我正在使用nodeJS而我无法使用JQuery函数。

我会点击.next课程。

这就是我要做的事情:

while (nbrPage > 0)
{
    //my scraping code
    nbrPage--;
    $('.next').click();
}

注意要刮掉的html代码是这样的:

<span class="next">
     <a id="nextPage-159c6fa8635" class="page" href="/blablabla"></a>
</span>

有没有人知道如何在NodeJS代码中使用JQuery方法或如何在NodeJS中使用click函数?

编辑:我正在抓取一个网站,我想循环每个分页并从每个页面中删除我的数据。为此,我需要转到下一页并单击下面的html代码。换句话说,我会在我的节点js代码中使用$('.next').click()之类的JQuery函数(使用requestcheerio)。

请注意,我不想处理点击事件,我希望点击。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

Cheerio是一个非常有用的工具,它允许您在Node.JS中使用jQuery。您可以在 - https://github.com/cheeriojs/cheerio

找到更多信息
  

请求旨在成为制作http的最简单方法   调用。它支持HTTPS并默认遵循重定向。

查看他们的文档 - https://github.com/request/request

对于服务器端,您需要创建一个函数来查找id为以“nextPage-”开头的href。然后IF发现你需要获得属性href的值。

从那里你可以将该值传递回你的“请求”脚本,我假设你已经拥有并继续你的报废,直到找不到“nextPage-”。

调用自身的函数的重复序列称为“递归”。

现在看看代码中的内容 -

// Load Dependencies
const CHEERIO = require("cheerio");
const REQUEST = require("request");


/**
 * Scraps HTML to find next page URL
 *
 * @function getNextPageUrl
 *
 * @param   {string} HTML
 *
 * @returns {string || boolean} Returns URL or False
 */
function getNextPageUrl(HTML) {

    // Load in scrapped html
    let $ = CHEERIO.load(HTML);

    // Find ID that starts with `nextPage-`
    let nextPage = $("span[id^='nextPage-']:first");

    // If it is 0, its false
    if(nextPage.length) {
        // Return href attribute value
        return nextPage.attr("href");
    } else {
        // Nothing found, return false
        return false;
    }

}


/**
 * Scraps the HTML from pages
 *
 * @function scrapper
 *
 * @param   {string} URL
 *
 * @returns {string || boolean} Returns URL or False
 */
function scrapper(URL) {

    // Check if URL was provided
    if(!URL) {
        return fasle;
    } 

    // Send out request to URL
    REQUEST(URL, function(error, response, body) {

        // Check for errors
        if(!error && response.statusCode == 200) {
           console.log(body) // Show the HTML

           // Recursion
           let URL = getNextPageURL(body);
           scrapper(URL);

        } else {
          return false;
        }

    });
}


// Pass to scrapper function test
//console.log(getNextPageURL("<span class='next'><a id='nextPage-159c6fa8635' class='page' href='/blablabla'></a></span>"));

// Start the initial scrapping
scrapper("http://google.com");

答案 1 :(得分:-1)

在Node.js中无法做到这一点。 Node.js是服务器端,而不是客户端。 作为解决方案,您可以在链接中解析 href 并请求废弃下一页。这就是服务器端抓取器通常的工作方式。