使用Javascript扩展中的Node js刮取网页

时间:2017-12-28 17:07:08

标签: javascript node.js google-chrome-extension request cheerio

我正在为Firefox创建一个javascript扩展,我想在其中使用一个scraper页面,找到一个子页面并将该URL传递给扩展中的一个函数。刮刀是使用Cheerio构建的,我在本地机器上使用Node.js创建并测试了刮刀,但是我在扩展中实现它时遇到了麻烦。我知道最有可能的是,在浏览器中运行扩展程序,不会让您创建“请求”连接。

当我调用scrape函数时,它没有给出任何错误,相反,它根本没有返回(也没有控制台日志,所以它没有触发)。有谁知道如何从任何机器上的扩展程序调用此功能?有没有办法在扩展中包含Node js或类似的东西?代码如下!

function scrape(item) {
    request(url, function (error, response, html) {
        if (!error && response.statusCode == 200) {
            console.log("connected");
            // create cheerio
            var $ = cheerio.load(html);

            $('.inner-article a').each(function (i, elem) {
                if ($(this).children().length == 1) {
                    availableItems.push($(this).attr('href'));
                }
            });

            availableItems.forEach(function (i) {
                request(url + i, function (error, response, html) {
                    if (!error && response.statusCode == 200) {
                        var $ = cheerio.load(html);
                        var title = $('#details').find('h1').text();
                        title = title.toLowerCase();
                        title = title.replace(/\s+/g, '');
                        var n = title.includes(item);
                        if (n) {
                            console.log('found');
                            itemurl = url + i + '';
                            return itemurl;
                        }
                    }
                });
            });
        }
    });
}

非常感谢!

1 个答案:

答案 0 :(得分:0)

Google Chrome扩展程序中的请求略有不同。

首先,您必须在manifest.json中包含您要抓取的域名。

"name": "Extension Name",
"permissions": [
  "http://www.example.com/"
]

您还必须使用XMLHttpRequest执行XHR请求,以获取所需的数据,并等待刮取数据所需的正确状态更改。你可以在这里阅读更多相关内容:

https://developer.chrome.com/extensions/xhr