我正在尝试使用以下代码抓取德语求职页面:
library(rvest)
url <- 'https://con.arbeitsagentur.de/prod/jobboerse/jobsuche-ui/?VOLLTEXT=data%20scientist&page=1&size=10&sort=Relevanz&FCT.AKTUALITAET=100&FCT.ANGEBOTSART=ARBEIT&FCT.BEHINDERUNG=AUS&s=2'
webpage <- read_html(url)
# In the following I try to read different elements from the html. In most of the cases I get empty result:
html_text(html_nodes(webpage,'.ba-jb-suchergebnis-oben-titel-headline a'))
# character(0)
html_text(html_nodes(webpage,'.ba-jb-suchergebnis-oben-titel-headline .ng-binding'))
# character(0)
html_text(html_nodes(webpage,'.jb-pristine .ng-binding'))
# character(0)
html_text(html_nodes(webpage,'.ng-binding'))
# character(0)
html_text(html_nodes(webpage,'h1'))
# character(0)
html_text(html_nodes(webpage,'a'))
# [1] "Anleitung, wie Sie JavaScript in Ihrem Browser einschalten"
html_text(html_nodes(webpage,'p'))
# [1] "Um den vollen Funktionsumfang dieser Webseite zu erfahren, benötigen Sie JavaScript. Hier finden Sie die Anleitung, wie Sie JavaScript in Ihrem Browser einschalten."
html_text(html_nodes(webpage,'p:nth-child(4)'))
# character(0)
html_text(html_nodes(webpage,'h2'))
# character(0)
html_text(html_nodes(webpage,'.post-box-title a'))
# character(0)
如果您检查页面,所有请求的元素都在那里。为什么我不能提取它们?
任何帮助都受到赞赏。
答案 0 :(得分:1)
该页面是动态更新的,即,当浏览器促进javascript运行时,您感兴趣的内容就会加载。如果在浏览器中禁用js,则会看到:
您的任何内容都不会被加载。如果检查网页的网页流量,除其他外,您会看到该页面发出了一个oauth令牌(gettoken_cc
)的POST请求,并传递了client_id
和client_secret
。然后,将返回的令牌用于带有this查询字符串的后续GET请求中。网址以https://api-con.arbeitsagentur.de/prod/jobboers开头(以防您明智地选择不单击该链接)......还有其他信息发送和网络访问。该页面的内容从该GET作为json返回。我不打算劫持这个API,因为我不知道它是否公开。
获取数据的方式可能会模仿在“网络”选项卡中看到的步骤,或者使用诸如硒之类的方法来实现浏览器自动化(从而允许js运行)。请先阅读条款和条件,看看是否允许。更好的是,查找有文档的公共API。