2017-12-15 11 views
1

rvestを使用して一部のウェブサイトのコンテンツをスクラップしようとしています。この例では、私はこのサイトの内容を掻きたい: "https://www.filmtotaal.nl/recensie/6693"。私が探している内容は、「ダマスカス、シリア...テ・ジイン」です。rvestを使用してwebdataを取得する

div id="adf-autonative" 

したがって、私が試した:

read_html("https://www.filmtotaal.nl/recensie/6693") %>% 
html_nodes(xpath = '//*[@id="adf-autonative"]') %>% 
xml_attr("value") 

これは、しかし、私を与える:

は、私がどのセクションにテキストを囲むdiv要素がでタグ付けされていることを確認するために、開発者を開いた「1」 。

私はまた、XPathをcompying試してみました:

xpath <- '/html/body/div[4]/div[1]/div/article/div/div/div[2]/strong[5]' 

read_html("https://www.filmtotaal.nl/recensie/6693") %>% 
    html_nodes(xpath = xpath) %>% 
    xml_attr("value") 

しかし、また、テキストを与えるものではありません。私が間違っている場所やベストプラクティスとして考えなければならないことについての考え方(xpath対他のアプローチ)

+0

彼らは[API](http://api.filmtotaal.nl/)を持っています – hrbrmstr

答えて

0

Google ChromeでInspectツールを使用すると、テキストがすべて<div class="text">の下にネストされていることがわかります。残念ながら、、ほとんどはが子ノードの外部に格納されています。

あなたは試してみて、以上-selectまず、そこからトリムでした:ノードによる直接の子テキストアウト

pg = read_html('https://www.filmtotaal.nl/recensie/6693') 
pg %>% html_nodes('div.text') %>% html_text %>% trimws 
# [1] "Regie: [...] |Jaar: 20171Damascus, Syrië.[...] te zijn." 

次の分割を容易に抽出するために、サブノード<em>および<strong>を含めるには//が必要であり、をイタリック体で表示したおよびをそれぞれ太字のテキストにすることに注意してください。

pg %>% html_nodes(xpath = '//div[@class="text"]//text()') %>% html_text %>% trimws 

# [1] ""                                                                                                                                                                                         
# [2] ""                                                                                                                                                                                         
# [3] ""                                                                                                                                                                                         
# [4] ""                                                                                                                                                                                         
# [5] ""                                                                                                                                                                                         
# [6] ""                                                                                                                                                                                         
# [7] ""                                                                                                                                                                                         
# [8] ""                                                                                                                                                                                         
# [9] ""                                                                                                                                                                                         
# [10] ""                                                                                                                                                                                         
# [11] ""                                                                                                                                                                                         
# [12] "Regie:"                                                                                                                                                                                        
# [13] "Philippe van Leeuw |"                                                                                                                                                                                    
# [14] "Cast:"                                                                                                                                                                                        
# [15] "Hiam Abbass (Oum Yazan), Diamand Bou Abboud (Halima), Juliette Navis (Delhani), Mohsen Abbas (Abou Monzer) e.a. |"                                                                                                                                                             
# [16] "Speelduur:"                                                                                                                                                                                       
# [17] "85 minuten |"                                                                                                                                                                                      
# [18] "Jaar:"                                                                                                                                                                                        
# [19] "2017"                                                                                                                                                                                        
# [20] "1"                                                                                                                                                                                         
# [21] "Damascus, Syrië. Vanuit zijn woonkamerraam kijkt een oudere man uit op de parkeerplaats van zijn appartementencomplex terwijl hij een sigaretje rookt. Een groepje mannen verzamelt zich enkele tientallen meters van het gebouw, tot uit het niets een kogel vlak bij hun voeten de grond raakt. Hij kijkt met lede ogen toe hoe de mannen beneden vluchten voor hun leven, en sjokt vervolgens terug naar zijn bank. Daar blijft hij enige tijd met zijn handen aan het hoofd zitten terwijl hij ontredderd voor zich uit staart. Op de salontafel ligt een stapel halflege sigarettendoosjes. De man raapt er eentje op en steekt nog een sigaret op. Wat kan hij anders doen?"                     
# [22] ""                                                                                                                                                                                         
# [23] "De openingsscène van"                                                                                                                                                                                    
# [24] "Insyriated"                                                                                                                                                                                       
# [25] ", de tweede film van de Belgische regisseur Philippe van Leeuw, schetst in één opslag het gevoel van wanhoop en claustrofobie van de situatie waarin de personages zich bevinden. Terwijl de Syrische burgeroorlog buiten volop aan de gang is, zit een familie, samen met een aantal huisgasten en een huishoudster al dagen, zo niet weken opgesloten in een klein appartement. Het gebouw verlaten is onveilig, aangezien hun woning omringd is door sluipschutters. Dit vraagt om drastische maatregelen, van een driedubbel slot op de deur en het rantsoeneren van water en voedsel, tot het eens in de zoveel tijd verschuilen onder de keukentafel wanneer er nabij een bom tot ontploffing komt."               
# [26] "In de afwezigheid van haar man, die zich nog ergens buitenshuis bevindt, doet de moeder des huizes haar uiterste best om het leven in het appartement zo normaal mogelijk te laten verlopen. Al haar goede bedoelingen ten spijt, wordt het haar behoorlijk lastig gemaakt door een ingrijpende gebeurtenis die al vroeg in de film plaatsvindt. Alleen de moeder en de huishoudster zijn hier getuige van, en besluiten een groot geheim te bewaren voor de rest van de bewoners. Dat blijkt echter een stuk minder eenvoudig wanneer je in een grote groep op elkaars lip zit, waardoor al gauw een gevoel van onderling wantrouwen en spanning wordt gecreëerd."                        
# [27] "Daarmee zijn er in Van Leeuws film voortdurend twee spanningsbogen aan het werk. Enerzijds is er in de achtergrond de aanhoudende dreiging van de burgeroorlog. Hoewel al het geweld bijna de gehele film buiten aan de gang is, fungeert het veelal aanwezige geknal van geweerschoten en bommen als een constante herinnering dat de bewoners hun leven niet zeker zijn. Het enge is dat al die oorlogsgeluiden na verloop van tijd bijna normaal begint te worden, als een soort geaccepteerde ruis op de achtergrond, totdat er eens een ontploffing klinkt die net te dichtbij huis is. Tegelijkertijd staat er binnenshuis ook een figuurlijke bom op barsten, met het geheim waarvan alleen de moeder des huizes, de huishoudster en de kijker weet hebben." 
# [28] "Zo houdt Van Leeuw de gemoederen lange tijd goed bezig, dankzij de interessante dynamiek tussen zijn personages, die door de dreiging van binnen- en buitenaf spannend blijft. Lange tijd is afwachten welke bom als eerste zal barsten, totdat in de laatste akte de echte confrontatie zich pas ontpopt. Hierin neemt het verhaal plotseling een heel donkere en akelige wending, die ook voor de kijker maar moeilijk te doorstaan is. Het maakt"                                                                            
# [29] "Insyriated"                                                                                                                                                                                       
# [30] "tot een zeer beklemmende en oncomfortabele zit. Precies zoals een oorlogsfilm eigenlijk hoort te zijn."                                                                                                                                                                
# [31] ""                                                                                                                                                                                         
# [32] ""                                                                                                                                                                                         
# [33] ""                                                                                                                                                                                         
# [34] ""                                                                                                                                                                                         
# [35] ""                                                                                                                                                                                         
# [36] ""                                                                                                                                                                                         
# [37] "" 

これを手に入れることで、次のようなテキストが表示されます。しかし、最終的に正規表現を使用すると、こする終わる可能性があり、すべてのページに完全に堅牢ではないかもしれないので、更なる工夫が必要な場合があります:私たちはrvestを超えて少し行くために喜んでいる場合は、我々はおそらくほとんどをターゲットに再現性を得ることができます

pg %>% html_nodes(xpath = '//div[@class="text"]//text()') %>% 
    html_text %>% trimws %>% 
    # Upon splitting, the earlier text appears to 
    # be characterized by 
    # (1) 'Field:' pattern from <strong> nodes 
    # (2) 'value |' pattern following <strong> nodes 
    # (3) 'YYYY' year for the final Field 
    # (4) random whitespace 
    # (1), (2), and (3/4) are the parts of this regex; 
    # * instead of + here captures empty rows 
    grep('^[a-zA-Z]+:|\\|$|^[0-9]*$', ., 
     invert = TRUE, value = TRUE) %>% 
    paste(collapse = ' ') 
# [1] "Damascus, Syrië. [...] te zijn." 
0

完全にきれいなテキスト。私はいくつかのURLを介してそれを実行し、それはかなりまともです(サイトはそのフォーマットに矛盾しています)。

あなたはこの方法のための無料API keyを必要とするが、それは嫌なものを削除する素晴らしい仕事をしていません:

library(hgr) # devtools::install_github("hrbrmstr/hgr") AND signup for a free API key 
library(rvest) 
library(htmltidy) 
library(stringi) 
library(tidyverse) 

review_ids <- c("6693", "1286", "12305", "10594") 

get_review_text <- function(id) { 

    jtf <- hgr::just_the_facts(sprintf("https://www.filmtotaal.nl/recensie/%s", id)) 

    tidy_html(jtf$content) %>% 
    read_html() %>% 
    html_text() %>% 
    stri_trim_both() %>% 
    discard(`==`, "") %>% 
    paste0(collapse="\n") 

} 

reviews_df <- map_chr(review_ids, get_review_text) 

rdf[1] 
## [1] "1\nDamascus, Syrië. Vanuit zijn woonkamerraam kijkt een oudere man uit op de\nparkeerplaats van zijn appartementencomplex terwijl hij een sigaretje\nrookt. Een groepje mannen verzamelt zich enkele tientallen meters van het\ngebouw, tot uit het niets een kogel vlak bij hun voeten de grond raakt. Hij\nkijkt met lede ogen toe hoe de mannen beneden vluchten voor hun leven, en\nsjokt vervolgens terug naar zijn bank. Daar blijft hij enige tijd met zijn\nhanden aan het hoofd zitten terwijl hij ontredderd voor zich uit staart. Op\nde salontafel ligt een stapel halflege sigarettendoosjes. De man raapt er\neentje op en steekt nog een sigaret op. Wat kan hij anders doen?\nDe openingsscène van Insyriated, de tweede film van de Belgische regisseur\nPhilippe van Leeuw, schetst in één opslag het gevoel van wanhoop en\nclaustrofobie van de situatie waarin de personages zich bevinden. Terwijl\nde Syrische burgeroorlog buiten volop aan de gang is, zit een familie,\nsamen met een aantal huisgasten en een huishoudster al dagen, zo niet weken\nopgesloten in een klein appartement. Het gebouw verlaten is onveilig,\naangezien hun woning omringd is door sluipschutters. Dit vraagt om\ndrastische maatregelen, van een driedubbel slot op de deur en het\nrantsoeneren van water en voedsel, tot het eens in de zoveel tijd\nverschuilen onder de keukentafel wanneer er nabij een bom tot ontploffing\nkomt.\nIn de afwezigheid van haar man, die zich nog ergens buitenshuis bevindt,\ndoet de moeder des huizes haar uiterste best om het leven in het\nappartement zo normaal mogelijk te laten verlopen. Al haar goede\nbedoelingen ten spijt, wordt het haar behoorlijk lastig gemaakt door een\ningrijpende gebeurtenis die al vroeg in de film plaatsvindt. Alleen de\nmoeder en de huishoudster zijn hier getuige van, en besluiten een groot\ngeheim te bewaren voor de rest van de bewoners. Dat blijkt echter een stuk\nminder eenvoudig wanneer je in een grote groep op elkaars lip zit, waardoor\nal gauw een gevoel van onderling wantrouwen en spanning wordt gecreëerd.\nDaarmee zijn er in Van Leeuws film voortdurend twee spanningsbogen aan het\nwerk. Enerzijds is er in de achtergrond de aanhoudende dreiging van de\nburgeroorlog. Hoewel al het geweld bijna de gehele film buiten aan de gang\nis, fungeert het veelal aanwezige geknal van geweerschoten en bommen als\neen constante herinnering dat de bewoners hun leven niet zeker zijn. Het\nenge is dat al die oorlogsgeluiden na verloop van tijd bijna normaal begint\nte worden, als een soort geaccepteerde ruis op de achtergrond, totdat er\neens een ontploffing klinkt die net te dichtbij huis is. Tegelijkertijd\nstaat er binnenshuis ook een figuurlijke bom op barsten, met het geheim\nwaarvan alleen de moeder des huizes, de huishoudster en de kijker weet\nhebben.\nZo houdt Van Leeuw de gemoederen lange tijd goed bezig, dankzij de\ninteressante dynamiek tussen zijn personages, die door de dreiging van\nbinnen- en buitenaf spannend blijft. Lange tijd is afwachten welke bom als\neerste zal barsten, totdat in de laatste akte de echte confrontatie zich\npas ontpopt. Hierin neemt het verhaal plotseling een heel donkere en\nakelige wending, die ook voor de kijker maar moeilijk te doorstaan is. Het\nmaakt Insyriated tot een zeer beklemmende en oncomfortabele zit. Precies\nzoals een oorlogsfilm eigenlijk hoort te zijn." 
関連する問題