使用R进行网页抓取搜索结果

时间:2019-08-03 11:23:53

标签: r web-scraping rvest

我正在尝试使用以下代码抓取德语求职页面:

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)

如果您检查页面,所有请求的元素都在那里。为什么我不能提取它们?

任何帮助都受到赞赏。

1 个答案:

答案 0 :(得分:1)

该页面是动态更新的,即,当浏览器促进javascript运行时,您感兴趣的内容就会加载。如果在浏览器中禁用js,则会看到:

enter image description here

您的任何内容都不会被加载。如果检查网页的网页流量,除其他外,您会看到该页面发出了一个oauth令牌(gettoken_cc)的POST请求,并传递了client_idclient_secret。然后,将返回的令牌用于带有this查询字符串的后续GET请求中。网址以https://api-con.arbeitsagentur.de/prod/jobboers开头(以防您明智地选择不单击该链接)......还有其他信息发送和网络访问。该页面的内容从该GET作为json返回。我不打算劫持这个API,因为我不知道它是否公开。

获取数据的方式可能会模仿在“网络”选项卡中看到的步骤,或者使用诸如硒之类的方法来实现浏览器自动化(从而允许js运行)。请先阅读条款和条件,看看是否允许。更好的是,查找有文档的公共API。