从r中的字符串中提取图像源

时间:2018-04-01 21:27:20

标签: r web-scraping rvest

我正在尝试从不同的网站中删除图片来源。我使用rvest来做到这一点。我遇到的问题是我有一个包含源的向量string,但我需要从中提取源。以下是前几个条目:

> string
{xml_nodeset (100)}
 [1] <td class="no-wrap currency-name" data-sort="Bitcoin">\n<img src="https://s2.coinmarketc ...
 [2] <td class="no-wrap currency-name" data-sort="Ethereum">\n<img src="https://s2.coinmarket ...
 [3] <td class="no-wrap currency-name" data-sort="Ripple">\n <img src="https://s2.coinmarketc ...

我需要的基本上是src="之后的部分,所以对于第一个"https://s2.coinmarketcap.com/static/img/coins/16x16/1.png"(控制台不会显示完整的字符串,但这会显示在点...之后之后还有更多的东西。)

任何帮助都会受到赞赏,因为我有点卡在这里。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

library(rvest)
read_html("https://coinmarketcap.com/coins/")%>%
     html_nodes("td img")%>%html_attr("src")

  [1] "https://s2.coinmarketcap.com/static/img/coins/16x16/1.png"            
  [2] "https://s2.coinmarketcap.com/generated/sparklines/web/7d/usd/1.png"   
  [3] "https://s2.coinmarketcap.com/static/img/coins/16x16/1027.png"         
  [4] "https://s2.coinmarketcap.com/generated/sparklines/web/7d/usd/1027.png"
  [5] "https://s2.coinmarketcap.com/static/img/coins/16x16/52.png"           
  [6] "https://s2.coinmarketcap.com/generated/sparklines/web/7d/usd/52.png"  
  [7] "https://s2.coinmarketcap.com/static/img/coins/16x16/1831.png"         
  [8] "https://s2.coinmarketcap.com/generated/sparklines/web/7d/usd/1831.png"
    :
    :
    :
    :

答案 1 :(得分:1)

正如评论中所指出的,正则表达式应该这样做:

myhtml <- gsub('^.*https://\\s*|\\s*.png.*$', "", string)
myhtml <- paste0("https://", myhtml, ".png")

第一行将提取https://.png之间包含的字符串部分,第二行会将它们粘贴回字符串中,以便拥有有效的来源,即使用{{最后1}}和https://