Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
抓取引用R中外部Javascript脚本的Javascript呈现网页_Javascript_R_Web Scraping_Phantomjs - Fatal编程技术网

抓取引用R中外部Javascript脚本的Javascript呈现网页

抓取引用R中外部Javascript脚本的Javascript呈现网页,javascript,r,web-scraping,phantomjs,Javascript,R,Web Scraping,Phantomjs,我正在尝试刮取此网页: 由于网页似乎是动态呈现的,因此我遵循本教程: 正如教程所建议的,我使用以下代码保存了一个名为“scrape_芥末.js”的文件: // scrape_mustard.js var webPage = require('webpage'); var page = webPage.create(); var fs = require('fs'); var path = 'mustard.html' page.open('https://www.mustardbet.c

我正在尝试刮取此网页:

由于网页似乎是动态呈现的,因此我遵循本教程:

正如教程所建议的,我使用以下代码保存了一个名为“scrape_芥末.js”的文件:

// scrape_mustard.js

var webPage = require('webpage');
var page = webPage.create();

var fs = require('fs');
var path = 'mustard.html'

page.open('https://www.mustardbet.com/sports/events/302698', function (status) {
  var content = page.content;
  fs.write(path,content,'w')
  phantom.exit();
});
然后,我表演

system("./phantomjs scrape_mustard.js")
但我得到了一个错误:

ReferenceError: Can't find variable: Set

  https://www.mustardbet.com/assets/js/index.dfd873fb.js:1
  https://www.mustardbet.com/assets/js/index.dfd873fb.js:1 in t
  https://www.mustardbet.com/assets/js/index.dfd873fb.js:1
  https://www.mustardbet.com/assets/js/index.dfd873fb.js:1 in t
  https://www.mustardbet.com/assets/js/index.dfd873fb.js:1
  https://www.mustardbet.com/assets/js/index.dfd873fb.js:1 in t
  https://www.mustardbet.com/assets/js/index.dfd873fb.js:1
  https://www.mustardbet.com/assets/js/index.dfd873fb.js:1 in t
  https://www.mustardbet.com/assets/js/index.dfd873fb.js:1
现在,当我将“”粘贴到浏览器中时,我可以看到它是javascript,我可能需要 (1) 将其另存为文件,或 (2) 将其包含在scrape_芥末.js中

但是如果(1),我不知道如何引用这个新文件,如果(2),我不知道如何正确定义所有javascript以便可以使用它

我对javascript完全是个新手,但这个问题可能不太难吧


谢谢你的帮助

我能够使用js模块
puppeter.js
进行刮取

下载
node.js
node.js
附带了
npm
,这使您在安装模块时的生活更加轻松。您需要使用
npm
安装木偶演员

在RStudio中,当您安装
puppeter.js
时,确保您在工作目录中。安装
node.js
后,执行()操作:

系统(“npm i木偶演员”)

scrape_芥末酱.js

// load modules
const fs = require("fs");
const puppeteer = require("puppeteer");

// page url
url = "https://www.mustardbet.com/sports/events/302698";

scrape = async() => {
    const browser = await puppeteer.launch({headless: false}); // open browser
    const page = await browser.newPage(); // open new page
    await page.goto(url, {waitUntil: "networkidle2", timeout: 0}); // go to page
    await page.waitFor(5000); // give it time to load all the javascript rendered content
    const html = await page.content(); // copy page contents
    browser.close(); // close chromium
    return html // return html object
};

scrape().then((value) => {
    fs.writeFileSync("./stackoverflow/page.html", value) // write the object being returned by scrape()
});
要在
R
中运行
scrape_芥末酱.js

library(magrittr)

system("node ./stackoverflow/scrape_mustard.js")

html <- xml2::read_html("./stackoverflow/page.html")

oddsMajor <- html %>% 
  rvest::html_nodes(".odds-major")

betNames <- html %>% 
  rvest::html_nodes("h3")
库(magrittr)
系统(“node./stackoverflow/scrape_mu.js”)
html域名
{xml_nodeset(60)}
[1] 查尔斯·豪厄尔三世\n
[2] 布赖恩·哈曼\n
[3] Austin Cook\n
[4] J.J.斯潘\n
[5] 韦布·辛普森\n
[6] Cameron Champ\n
[7] Peter Uichlein\n
[8] 承在音\n
[9] 尼克·沃特尼\n
[10] 格雷姆·麦克道尔\n
[11] 扎克·约翰逊\n
[12] 卢卡斯·格洛弗\n
[13] 科里·康纳斯\n
[14] 路加列表\n
[15] David Hearn\n
[16] 亚当·申克\n
[17] 凯文·基斯纳\n
[18] 布莱恩·盖伊\n
[19] 巴顿基齐尔\n
[20] 布里斯·加内特\n
...

我确信它可以通过
phantomjs
完成,但我发现
puppeter
更容易抓取javascript呈现的网页。还要记住,
phantomjs

我能够使用js模块
puppeter.js
进行抓取

下载
node.js
node.js
附带了
npm
,这使您在安装模块时的生活更加轻松。您需要使用
npm
安装木偶演员

在RStudio中,当您安装
puppeter.js
时,确保您在工作目录中。安装
node.js
后,执行()操作:

系统(“npm i木偶演员”)

scrape_芥末酱.js

// load modules
const fs = require("fs");
const puppeteer = require("puppeteer");

// page url
url = "https://www.mustardbet.com/sports/events/302698";

scrape = async() => {
    const browser = await puppeteer.launch({headless: false}); // open browser
    const page = await browser.newPage(); // open new page
    await page.goto(url, {waitUntil: "networkidle2", timeout: 0}); // go to page
    await page.waitFor(5000); // give it time to load all the javascript rendered content
    const html = await page.content(); // copy page contents
    browser.close(); // close chromium
    return html // return html object
};

scrape().then((value) => {
    fs.writeFileSync("./stackoverflow/page.html", value) // write the object being returned by scrape()
});
要在
R
中运行
scrape_芥末酱.js

library(magrittr)

system("node ./stackoverflow/scrape_mustard.js")

html <- xml2::read_html("./stackoverflow/page.html")

oddsMajor <- html %>% 
  rvest::html_nodes(".odds-major")

betNames <- html %>% 
  rvest::html_nodes("h3")
库(magrittr)
系统(“node./stackoverflow/scrape_mu.js”)
html域名
{xml_nodeset(60)}
[1] 查尔斯·豪厄尔三世\n
[2] 布赖恩·哈曼\n
[3] Austin Cook\n
[4] J.J.斯潘\n
[5] 韦布·辛普森\n
[6] Cameron Champ\n
[7] Peter Uichlein\n
[8] 承在音\n
[9] 尼克·沃特尼\n
[10] 格雷姆·麦克道尔\n
[11] 扎克·约翰逊\n
[12] 卢卡斯·格洛弗\n
[13] 科里·康纳斯\n
[14] 路加列表\n
[15] David Hearn\n
[16] 亚当·申克\n
[17] 凯文·基斯纳\n
[18] 布莱恩·盖伊\n
[19] 巴顿基齐尔\n
[20] 布里斯·加内特\n
...

我确信它可以通过
phantomjs
完成,但我发现
puppeter
更容易抓取javascript呈现的网页。另外请记住,
phantomjs

当然,如果有人能用另一种R方法来抓取这个页面,我很乐意听到!当然,如果有人有办法用另一种R方法来刮这一页,我会很高兴听到的!