Şu harika yanıta bakıyorum: https://stackoverflow.com/a/58211397/3502164.
Çözümün başlangıcı şunları içerir:
library(httr)
library(xml2)
gr <- GET("https://nzffdms.niwa.co.nz/search")
doc <- read_html(content(gr, "text"))
xml_attr(xml_find_all(doc, ".//input[@name='search[_csrf_token]']"), "value")
Çıktı, birden çok istekte sabittir:
"59243d3a2....61f8f73136118f9"
Şimdiye kadarki varsayılan yolum şöyle olurdu:
doc <- read_html("https://nzffdms.niwa.co.nz/search")
xml_attr(xml_find_all(doc, ".//input[@name='search[_csrf_token]']"), "value")
Bu sonuçlar, yukarıdaki Çıktıya göre farklılık gösterir ve birden çok istekte değişiklik gösterir.
Soru:
Aradaki fark nedir:
read_html(url)read_html(content(GET(url), "text"))Neden farklı değerlerle sonuçlanıyor ve neden yalnızca "GET" çözümü bağlantılı soruda csv'yi döndürüyor?
(Umarım üç tür Alt Soru şeklinde yapılandırılmasının uygun olacağını umuyorum).
Ne denedim:
İşlev çağrılarının Tavşan deliğinden aşağı inmek:
read_html
(ms <- methods("read_html"))
getAnywhere(ms[1])
xml2:::read_html
xml2:::read_html.default
#xml2:::read_html.response
read_xml
(ms <- methods("read_xml"))
getAnywhere(ms[1])
Ancak bu, şu Soru ile sonuçlandı: R sarmalayıcı işlevleri için kullanılan yöntemi bulun
Düşünceler:
Alma isteğinin, farklı Yanıtları açıklayabilecek herhangi bir başlık veya Çerez aldığını görmüyorum.
Benim hem anlayış itibaren read_htmlve read_html(content(GET(.), "text"))/ html XML dönecektir.
Tamam, burada kontrol etmenin mantıklı olup olmadığından emin değilim, ama fikirlerim tükendiği için: Bir tür Önbelleğe Alma olup olmadığını kontrol ettim.
Kod:
with_verbose(GET("https://nzffdms.niwa.co.nz/search"))
....
<- Expires: Thu, 19 Nov 1981 08:52:00 GMT
<- Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
-> Bana önbelleğe alma çözüm olabilir gibi görünmüyor.
help("GET")bir "koşullu GET" ile ilgili ilginç bir bölüm verir:İstek mesajı If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match veya If-Range üstbilgi alanı içeriyorsa, GET yönteminin semantiği "koşullu GET" olarak değişir. Koşullu bir GET yöntemi, varlığın yalnızca koşullu başlık alan (lar) ı tarafından açıklanan koşullar altında aktarılmasını talep eder. Koşullu GET yöntemi, önbelleğe alınan varlıkların birden çok istek gerektirmeden veya istemci tarafından tutulan verileri aktarmadan yenilenmesine izin vererek gereksiz ağ kullanımını azaltmayı amaçlamaktadır.
Ama gördüğüm kadarıyla with_verbose()Hiçbiri If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Rangeayarlanmadı.
Aradaki fark, tekrarlanan aramalarda httr::GET, tutamacın aramalar arasında devam etmesidir. İle xml2::read_html()her seferinde yeni bir bağlantı kurulur.
Httr belgelerinden:
Tutamaç havuzu, aynı şema / ana bilgisayar / bağlantı noktası kombinasyonu için Curl tutamaçlarını otomatik olarak yeniden kullanmak için kullanılır. Bu, http oturumunun otomatik olarak yeniden kullanılmasını ve kullanıcı müdahalesi olmadan bir siteye yapılan isteklerde tanımlama bilgilerinin saklanmasını sağlar.
Xml2 belgelerinden, iletilen dize parametresini tartışarak read_html():
Bir dize, bir yol, bir url veya değişmez xml olabilir. Url'ler ya kullanılarak
base::urlya da kuruluysa bağlantılara dönüştürülecektir.curl::curl
Yani cevabınız read_html(GET(url))tarayıcınızı yenilemek gibidir, ancak read_html(url)tarayıcınızı kapatıp yeni bir tane açmak gibidir. Sunucu, sunduğu sayfada benzersiz bir oturum kimliği verir. Yeni oturum, yeni kimlik. Bunu arayarak kanıtlayabilirsiniz httr::reset_handle(url):
library(httr)
library(xml2)
# GET the page (note xml2 handles httr responses directly, don't need content("text"))
gr <- GET("https://nzffdms.niwa.co.nz/search")
doc <- read_html(gr)
print(xml_attr(xml_find_all(doc, ".//input[@name='search[_csrf_token]']"), "value"))
# A new GET using the same handle gets exactly the same response
gr <- GET("https://nzffdms.niwa.co.nz/search")
doc <- read_html(gr)
print(xml_attr(xml_find_all(doc, ".//input[@name='search[_csrf_token]']"), "value"))
# Now call GET again after resetting the handle
httr::handle_reset("https://nzffdms.niwa.co.nz/search")
gr <- GET("https://nzffdms.niwa.co.nz/search")
doc <- read_html(gr)
print(xml_attr(xml_find_all(doc, ".//input[@name='search[_csrf_token]']"), "value"))
Benim durumumda, yukarıdaki kodun kaynağı bana şunu verir:
[1] "ecd9be7c75559364a2a5568049c0313f"
[1] "ecd9be7c75559364a2a5568049c0313f"
[1] "d953ce7acc985adbf25eceb89841c713"
Jana Duggar, aşkı arayışı konusunda açıktı. İşte konu hakkında söylediği her şey ve beş yıllık evlilik penceresi.
Outlander'ın yıldızı Sam Heughan kısa süre önce kendisini yıldız yapan rol olan Jamie Fraser'ı hatırlamak için setten ne alacağını açıkladı.
'She Loves You' bir saatte yazıldı, bir günde kaydedildi ve kariyerlerinin en iyi performanslarından birine sahip The Beatles şarkısı oldu.
Dolly Parton ve büyükannesi Bessie'nin özel bir ilişkisi vardı. Büyükanne Parton çok hastaydı ama bu Dolly'nin ona şaka yapmasını engellemedi.
Meşe veya ceviz ağacının sert olduğunu düşünebilirsiniz, ancak dünyanın en sert ağaçları söz konusu olduğunda, onlara yaklaşamazlar bile.
Okyanus güzelliklerle dolu, ama aynı zamanda gezegenimizin en korkunç deniz canlılarından bazılarını da içinde barındırıyor. Bu hayvanların çoğu, okyanus yüzeyinin çok altında, derin denizin karanlık ve yüksek basınçlı dünyasında gizleniyor.
Düşman yaratıklarla savaşıyorsanız veya PvP senaryolarına hazırlanıyorsanız, Minecraft'taki en iyi kılıç büyülerini bilmek size büyük bir avantaj sağlayabilir. Kılıçları büyülemek daha fazla hasar vermenizi, yaratıklardan düşen düşman sayısını artırmanızı ve kılıcınızın dayanıklılığını uzatmanızı sağlar.
Sosyalist ülkelerden bahsedildiğinde, genellikle tam devlet kontrolü ve özel mülkiyetin olmadığı düşünülür. Ancak pratikte sosyalist ekonomiler büyük farklılıklar gösterir.
“Children”dan ünlü bir konuk oyuncu ve bazı yıkıcı haberler yayınlanıyor
Bu RAV4'ün mükemmel durumda olduğu ve sandalye oyununa hazır olduğu iddia ediliyor.
İtfaiye ekiplerinin yangını söndürmeye çalıştığı görüntüler drone ile görüntülendi.
Eyes of Wakanda doğrudan MCU'ya bağlanıyor ve ayrıca X-Men '97, What If..., Daredevil ve daha fazlasıyla ilgili güncellemeler sunuyor.
'Laguna Beach', 2000'lerin ortalarında lise öğrencileri Lauren Conrad, Kristin Cavallari, Stephen Colletti ve daha fazlasının hayatlarını takip ediyordu. İşte MTV gerçeklik dizisinin oyuncu kadrosunun şu anki hali.
Ava Gardner, Mickey Rooney ve Frank Sintra ile evlenecekti ve birkaç Hollywood yıldızıyla daha çıktı. İşte Ava Gardner'ın çıkma geçmişine bir bakış.
John Cleese, eşi Jennifer Wade ile 2012 yılında evlendi. John Cleese'in eşi Jennifer Wade hakkında bilmeniz gereken her şey burada.
Michael C. Hall, 2016 yılından bu yana eşi Morgan Macgregor ile evli. Michael C. Hall'un eşi hakkında bilmeniz gereken her şey burada.
Çoğu zaman olduğu gibi birdenbire gözüme çarpıyor Her şey yeniden yarı yolda <Hayır, Pasifik'te kesip attığınız değil, karnavalda olan> Her manşet yüksek sesle… ..
2022'de GPT-3'ün piyasaya sürülmesiyle yazma becerisinin önemi azalmış gibi görünüyor. AI ile, zayıf yazıya sahip kişiler de kaliteli personel oluşturabilir.
Günümüzün hızlı tempolu ve rekabetçi dünyasında, kişinin kariyeri kişisel gelişim, finansal istikrar ve genel yaşam memnuniyetinde önemli bir rol oynamaktadır. Bununla birlikte, birçok kişi profesyonel yaşamlarında giderek tükenmekte olan amansız bir durgunluk ve tatminsizlik döngüsüne kapılmış durumda.
Geçen hafta PressGazette (İngiliz medya haber sitesi) aracılığıyla gönderilen bir basın bildirisi fark ettim. Makale, Scandi podcast barındırma ve reklamcılık şirketi Acast'ın podcasting alanında "muhtemelen en etkili" yayıncılardan oluşan bir konsorsiyuma liderlik edeceğini duyurdu.