Combinatori CSS

Web scraping in R

Timo Grossenbacher

Instructor

Esistono quattro combinatori

Struttura: h2#someid {space|>|+|~} .someclass

space: Combinatore discendente

>: Combinatore figlio

+: Combinatore fratello adiacente

~: Combinatore fratello generico

Web scraping in R

I combinatori discendente e figlio

<html>
  <body>
    <div class = 'first'>
      <a>Un link.</a>
      <p>Il primo paragrafo con 
        <a>un altro link</a>.
      </p>
    </div>
    <div>
      Non un vero paragrafo, 
      ma con un <a href="#">link</a>.
    </div>
  </body>
</html>
html %>% 
    html_elements('div.first a')
{xml_nodeset (2)}
[1] <a>Un link.</a>
[2] <a>un altro link</a>
html %>% 
    html_elements('div.first > a')
{xml_nodeset (1)}
[1] <a>Un link.</a>
Web scraping in R

I combinatori fratello

<html>
  <body>
    <div class = 'first'>
      <a>Un link.</a>
      <p>Il primo paragrafo con 
        <a>un altro link</a>.
      </p>
    </div>
    <div>
      Non un vero paragrafo, 
      ma con un <a href="#">link</a>.
    </div>
    <p>Un paragrafo.</p>
  </body>
</html>
html %>% html_elements('div.first + div')
{xml_nodeset (1)}
[1] <div>\n Non un vero...
html %>% html_elements('div.first ~ div')
{xml_nodeset (1)}
[1] <div>\n Non un vero...
html %>% html_elements('div.first ~ *')
{xml_nodeset (2)}
[1] <div>\n Non un vero... [2] <p>Un paragrafo...
Web scraping in R

Quando i combinatori sono utili

...
    <div id = 'start'>
      <h1 class = 'first'>Primo</h1>
    </div>
    <div id = 'end'>
      <p class = 'text1'>Un po' di testo.</p>
      <p class = 'text2'>Altro testo.</p>
    </div>
...
html %>% html_elements('.text2')
{xml_nodeset (1)}
[1] <p class="text2">Altro testo.</p>
...
    <div>
      <h1>Primo</h1>
    </div>
    <div>
      <p>Un po' di testo.</p>
      <p>Altro testo.</p>
    </div>
...
html %>% html_elements('p + p')
{xml_nodeset (1)}
[1] <p>Altro testo.</p>
Web scraping in R

Passiamo alla pratica !

Web scraping in R

Preparing Video For Download...