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

问题描述 投票:0回答:2

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

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)

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

非常感谢任何帮助。

r web-scraping rvest
2个回答
1
投票

页面是动态更新的,即当浏览器有利于 JavaScript 运行时,您感兴趣的内容就会被加载。如果您在浏览器中禁用 js,您将看到:

并且您的任何内容都不会被加载。如果您检查该页面的网络流量,除其他外,您将看到该页面发出对 oauth 令牌 (

gettoken_cc
) 的 POST 请求,并传递
client_id
client_secret
。然后,返回的令牌将在稍后带有 this 查询字符串的 GET 请求中使用。网址以 https://api-con.arbeitsagentur.de/prod/jobboers 开头(如果您明智地选择不单击该链接)……还有其他信息发送和网络流量。页面的内容从该 GET 以 json 形式返回。我不会尝试劫持这个 API,因为我不知道它是否是公开的。

获取数据的方式可能会模仿网络选项卡中看到的步骤或使用像 selenium 这样的方法来实现浏览器自动化(从而允许 js 运行)。首先阅读条款和条件,看看是否允许。更好的是,寻找有文档记录的公共 API。


0
投票

请使用官方API。 https://jobsuche.api.bund.dev/

© www.soinside.com 2019 - 2024. All rights reserved.