R: rvest - 使用 rvest 获取嵌套文本
R: rvest - getting nested text with rvest
问题:
从该网站提取产品图像的URL:
http://www.linio.com.pe/computacion/pc-escritorio/
有些图片有属性"data-origin",我可以拉取图片的url。问题是,有些产品没有这个属性。但是他们在 src 属性中有我需要的 URL 。
到目前为止:
1) 对于具有 "data-origin" 属性的产品,我可以获得 url。
2) 当产品不具有属性 "data-origin" 但在 src 属性中具有 url 时,无法获取 url。
#
注意事项:
源代码中有两个url:有和没有.sprite.。
我不需要精灵部分的 url。
1 个产品的示例:
右 URL: http://media.linio.com.pe/p/hp-1987-043329-1-catalog.jpg
这个可以在img标签中找到,也可以在noscript部分找到。
错误URL:http://media.linio.com.pe/p/hp-1987-043329-sprite.jpg
这是在class"sprite-hidden"
更新 1:
使用 SelectorGadget 它说我应该使用“.lazyImg”。但是我没有得到我所期望的。
PCimgs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".lazyImg")%>%
html_text()
但我得到:
[1] "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
更新 2:
调查我看到有人可以使用两个 html_nodes,一个接一个。
这更接近我想要的。因为我需要为页面上的所有产品提及 url。
PCs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img")
但是,这给了我比需要更多的信息。所以我尝试了这个修改(感谢用户的这个想法):
PCs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img") %>%
html_attr("data-original")
这有效!!!部分:
我得到:
[1] "http://media.linio.com.pe/p/hp-1987-043329-1-catalog.jpg"
[2] NA
[3] "http://media.linio.com.pe/p/hp-7585-499619-1-catalog.jpg"
[4] NA
这是因为一些元素具有属性:data-origin,而另一些则没有。但是他们在 scr 属性中有我需要的 url。所以我使用:
PCs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img") %>%
html_attr("scr")
但我得到:
> PCs
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[33] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
有什么帮助吗?
#
这是页面 (http://www.linio.com.pe/computacion/pc-escritorio/)
的源代码
<ul class="product-items" id="catalog-items">
<li id="HP016EL59NXCPEAMZ" class="product-item " itemscope itemtype="http://schema.org/Product" data-badge="badgeDivFalse">
<a id="1:HP016EL59NXCPEAMZ" href="http://www.linio.com.pe/HP---Desktop-All-in-One-Intel-Celeron-18.5-500GB-4GB---Plateado-Negro-923340.html" title="HP - Desktop All-in-One Intel Celeron 18.5'' 500GB 4GB - Plateado/Negro">
<ul>
<li class="product-item-img" style="position: relative;">
<span class="lazyImage">
<span style="width:160px;height:160px;" class="itm-imageWrapper itm-imageWrapper-HP016EL59NXCPEAMZ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII="
data-original="http://media.linio.com.pe/p/hp-1987-043329-1-catalog.jpg"
width="160"
height="160" class="itm-img lazyImg"
onerror="catalog.onError($(this)); this.width=160">
<noscript>
<img
src="http://media.linio.com.pe/p/hp-1987-043329-1-catalog.jpg"
class="itm-img"
width="160"
height="160"
>
</noscript>
</span>
<span class="sprite hidden">http://media.linio.com.pe/p/hp-1987-043329-sprite.jpg</span>
</span>
</li>
PCs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_node("span.itm-imageWrapper.itm-imageWrapper-HP016EL59NXCPEAMZ img")%>%
html_attr("data-original")
[1] "http://media.linio.com.pe/p/hp-1987-043329-1-catalog.jpg"
这是问题的答案:
PC会给你代码图片部分的信息。在第 3 行中,您可以更具体地使用 "img" 来获取准确的信息。
PCs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img")
您会注意到某些元素在 "data-original" 属性中具有您想要的 url。而其他人会将其包含在 "src" 属性中。
示例"data-original":
[[47]]
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII=" data-original="http://media.linio.com.pe/p/epson-9425-1474711-1-catalog.jpg" width="160" height="160" class="itm-img lazyImg" onerror="catalog.onError($(this)); this.width=160"/>
示例"src":
[[46]]
<img src="http://media.linio.com.pe/p/lg-6587-168029-1-catalog.jpg" class="itm-img" width="160" height="160"/>
1 ) 使用此代码为具有 "src" 属性中的信息的元素获取 url。
PCs2 <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img") %>%
html_attr("src")
2 ) 使用此代码获取具有 "data-original" 属性中信息的元素的 url。
PCs3 <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img") %>%
html_attr("data-original")
问题继续存在,因为我需要一个 if else 语句来确定在哪里使用 "data-original" 属性或 "src" 属性。我会为此提出一个新问题。
问题:
从该网站提取产品图像的URL:
http://www.linio.com.pe/computacion/pc-escritorio/
有些图片有属性"data-origin",我可以拉取图片的url。问题是,有些产品没有这个属性。但是他们在 src 属性中有我需要的 URL 。
到目前为止:
1) 对于具有 "data-origin" 属性的产品,我可以获得 url。 2) 当产品不具有属性 "data-origin" 但在 src 属性中具有 url 时,无法获取 url。
#注意事项:
源代码中有两个url:有和没有.sprite.。 我不需要精灵部分的 url。
1 个产品的示例:
右 URL: http://media.linio.com.pe/p/hp-1987-043329-1-catalog.jpg
这个可以在img标签中找到,也可以在noscript部分找到。
错误URL:http://media.linio.com.pe/p/hp-1987-043329-sprite.jpg
这是在class"sprite-hidden"
更新 1:
使用 SelectorGadget 它说我应该使用“.lazyImg”。但是我没有得到我所期望的。
PCimgs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".lazyImg")%>%
html_text()
但我得到:
[1] "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
更新 2:
调查我看到有人可以使用两个 html_nodes,一个接一个。 这更接近我想要的。因为我需要为页面上的所有产品提及 url。
PCs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img")
但是,这给了我比需要更多的信息。所以我尝试了这个修改(感谢用户的这个想法):
PCs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img") %>%
html_attr("data-original")
这有效!!!部分:
我得到:
[1] "http://media.linio.com.pe/p/hp-1987-043329-1-catalog.jpg"
[2] NA
[3] "http://media.linio.com.pe/p/hp-7585-499619-1-catalog.jpg"
[4] NA
这是因为一些元素具有属性:data-origin,而另一些则没有。但是他们在 scr 属性中有我需要的 url。所以我使用:
PCs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img") %>%
html_attr("scr")
但我得到:
> PCs
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA [33] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
有什么帮助吗?
#这是页面 (http://www.linio.com.pe/computacion/pc-escritorio/)
的源代码 <ul class="product-items" id="catalog-items">
<li id="HP016EL59NXCPEAMZ" class="product-item " itemscope itemtype="http://schema.org/Product" data-badge="badgeDivFalse">
<a id="1:HP016EL59NXCPEAMZ" href="http://www.linio.com.pe/HP---Desktop-All-in-One-Intel-Celeron-18.5-500GB-4GB---Plateado-Negro-923340.html" title="HP - Desktop All-in-One Intel Celeron 18.5'' 500GB 4GB - Plateado/Negro">
<ul>
<li class="product-item-img" style="position: relative;">
<span class="lazyImage">
<span style="width:160px;height:160px;" class="itm-imageWrapper itm-imageWrapper-HP016EL59NXCPEAMZ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII="
data-original="http://media.linio.com.pe/p/hp-1987-043329-1-catalog.jpg"
width="160"
height="160" class="itm-img lazyImg"
onerror="catalog.onError($(this)); this.width=160">
<noscript>
<img
src="http://media.linio.com.pe/p/hp-1987-043329-1-catalog.jpg"
class="itm-img"
width="160"
height="160"
>
</noscript>
</span>
<span class="sprite hidden">http://media.linio.com.pe/p/hp-1987-043329-sprite.jpg</span>
</span>
</li>
PCs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_node("span.itm-imageWrapper.itm-imageWrapper-HP016EL59NXCPEAMZ img")%>%
html_attr("data-original")
[1] "http://media.linio.com.pe/p/hp-1987-043329-1-catalog.jpg"
这是问题的答案:
PC会给你代码图片部分的信息。在第 3 行中,您可以更具体地使用 "img" 来获取准确的信息。
PCs <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img")
您会注意到某些元素在 "data-original" 属性中具有您想要的 url。而其他人会将其包含在 "src" 属性中。
示例"data-original":
[[47]]
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII=" data-original="http://media.linio.com.pe/p/epson-9425-1474711-1-catalog.jpg" width="160" height="160" class="itm-img lazyImg" onerror="catalog.onError($(this)); this.width=160"/>
示例"src":
[[46]]
<img src="http://media.linio.com.pe/p/lg-6587-168029-1-catalog.jpg" class="itm-img" width="160" height="160"/>
1 ) 使用此代码为具有 "src" 属性中的信息的元素获取 url。
PCs2 <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img") %>%
html_attr("src")
2 ) 使用此代码获取具有 "data-original" 属性中信息的元素的 url。
PCs3 <- html("http://www.linio.com.pe/computacion/pc-escritorio/")%>%
html_nodes(".product-item-img") %>%
html_nodes("img") %>%
html_attr("data-original")
问题继续存在,因为我需要一个 if else 语句来确定在哪里使用 "data-original" 属性或 "src" 属性。我会为此提出一个新问题。