XR *_* SC 5 javascript r web-scraping
我使用R来解析html代码,我想知道稀疏以下代码的最有效方法:
<script type="text/javascript">
var utag_data = {
environnement : "prod",
device : getDevice(),
displaytype : getDisplay($(window).innerWidth()),
pagename : "adview",
pagetype : "annonce"}</script>
Run Code Online (Sandbox Code Playgroud)
我开始这样做:
infos = unlist(xpathApply(page,
'//script[@type="text/javascript"]',
xmlValue))
infos=gsub('\n| ','',infos)
infos=gsub("var utag_data = ","",infos)
fromJSON(infos)
Run Code Online (Sandbox Code Playgroud)
上面的代码返回了一些非常奇怪的东西:
$nvironnemen
[1] "prod"
$evic
NULL
$isplaytyp
NULL
$agenam
[1] "adview" etc.
Run Code Online (Sandbox Code Playgroud)
我想知道如何以非常有效的方式做到这一点:如何直接解析 javascript 中的数据列表?谢谢你。
我没有尝试您的代码,但我认为您的正则gsub()表达式可能过于激进(这可能导致名称修改)。
这是可能使用运行JavaScript代码V8包,但它不会是能够执行基于DOMgetDevice()和getDisplay()
,因为他们没有在V8引擎中存在的功能:
library(V8)
library(rvest)
pg <- read_html('<script type="text/javascript">
var utag_data = {
environnement : "prod",
device : getDevice(),
displaytype : getDisplay($(window).innerWidth()),
pagename : "adview",
pagetype : "annonce"}</script>')
script <- html_text(html_nodes(pg, xpath='//script[@type="text/javascript"]'))
ctx <- v8()
ctx$eval(script)
## Error: ReferenceError: getDevice is not defined
Run Code Online (Sandbox Code Playgroud)
但是,您可以对此进行补偿:
# we need to remove the function calls and replace them with blanks
# since both begin with 'getD' this is pretty easy:
script <- gsub("getD[[:alpha:]\\(\\)\\$\\.]+,", "'',", script)
ctx$eval(script)
ctx$get("utag_data")
## $environnement
## [1] "prod"
##
## $device
## [1] ""
##
## $displaytype
## [1] ""
##
## $pagename
## [1] "adview"
##
## $pagetype
## [1] "annonce"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |