CSS-combinators

Webscraping in R

Timo Grossenbacher

Instructor

Er zijn vier combinators

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

space: Afstammeling-combinator

>: Kind-combinator

+: Aangrenzende-broer/zus-combinator

~: Algemene broer/zus-combinator

Webscraping in R

Afstammeling- en kind-combinators

<html>
  <body>
    <div class = 'first'>
      <a>Een link.</a>
      <p>De eerste paragraaf met 
        <a>nog een link</a>.
      </p>
    </div>
    <div>
      Geen echte paragraaf, 
      maar met een <a href="#">link</a>.
    </div>
  </body>
</html>
html %>% 
    html_elements('div.first a')
{xml_nodeset (2)}
[1] <a>A link.</a>
[2] <a>another link</a>
html %>% 
    html_elements('div.first > a')
{xml_nodeset (1)}
[1] <a>A link.</a>
Webscraping in R

Broer/zus-combinators

<html>
  <body>
    <div class = 'first'>
      <a>Een link.</a>
      <p>De eerste paragraaf met 
        <a>nog een link</a>.
      </p>
    </div>
    <div>
      Geen echte paragraaf, 
      maar met een <a href="#">link</a>.
    </div>
    <p>Een paragraaf.</p>
  </body>
</html>
html %>% html_elements('div.first + div')
{xml_nodeset (1)}
[1] <div>\n Not an actual...
html %>% html_elements('div.first ~ div')
{xml_nodeset (1)}
[1] <div>\n Not an actual...
html %>% html_elements('div.first ~ *')
{xml_nodeset (2)}
[1] <div>\n Not an actual... [2] <p>A paragraph...
Webscraping in R

Wanneer combinators handig zijn

...
    <div id = 'start'>
      <h1 class = 'first'>Eerste</h1>
    </div>
    <div id = 'end'>
      <p class = 'text1'>Wat tekst.</p>
      <p class = 'text2'>Meer tekst.</p>
    </div>
...
html %>% html_elements('.text2')
{xml_nodeset (1)}
[1] <p class="text2">More text.</p>
...
    <div>
      <h1>Eerste</h1>
    </div>
    <div>
      <p>Wat tekst.</p>
      <p>Meer tekst.</p>
    </div>
...
html %>% html_elements('p + p')
{xml_nodeset (1)}
[1] <p>Meer tekst.</p>
Webscraping in R

Laten we oefenen!

Webscraping in R

Preparing Video For Download...