【问题标题】:Parsing Web page with R用 R 解析网页
【发布时间】:2015-02-23 13:17:16
【问题描述】:

这是我第一次在这里发帖。我在 html 解析/网页抓取方面没有太多经验(不到一周),并且在解析此网页时遇到了困难:

https://www.jobsbank.gov.sg/

我要做的是解析网络上所有可用工作列表的内容。

我的方法:

  1. 在一个空的搜索栏上单击搜索,这将返回我列出的所有记录。生成的网页是:https://www.jobsbank.gov.sg/ICMSPortal/portlets/JobBankHandler/SearchResult.do

  2. 将搜索结果网址提供给 R 并识别所有职位列表链接

  3. 将职位列表链接提供给 R,并要求 R 转到每个列表并提取内容。

  4. 查找下一页并重复步骤 2 和 3。

但是,问题是我从第 1 步得到的网页并没有将我引导到搜索结果页面。相反,它将引导我回到主页。

有没有办法克服这个问题?

假设我设法获得了搜索结果的网址,我打算使用以下代码:

base_url <- "https://www.jobsbank.gov.sg/ICMSPortal/portlets/JobBankHandler/SearchResult.do"
base_html <- getURLContent(base_url,cainfo="cacert.pem")[[1]]
links <- strsplit(base_html,"a href=")[[1]]

【问题讨论】:

  • 我建议您不要在 html 内容上使用 strsplit。查看 XML 或 httr 包。它们具有检索您正在寻找的信息的功能
  • 解析网页称为网页抓取。看看rvest

标签: r web-scraping html-parsing


【解决方案1】:

学习在网络浏览器中使用网络开发者工具(提示:使用 Chrome 或 Firefox)。

了解 HTTP GET 和 HTTP POST 请求。

请注意,搜索框会发送一个 POST 请求。

查看表单数据参数是什么(它们似乎是 {actionForm.checkValidRequest}:YES {actionForm.keyWord}:我的搜索字符串)

使用包含该表单数据的 R http 包之一构造一个 POST 请求。

希望服务器不关心 cookie,如果有,获取 cookie 并将其提供给它。

因此您最终使用来自RCurl 包的postForm

 p = postForm(url, .params=list(checkValidRequest="YES", keyword="finance")

然后从p 中提取表格。获取下一页涉及使用一堆不同的表单参数构造另一个表单请求。

基本上,网络请求不仅仅是一个 URL,浏览器和服务器之间还有所有其他对话,涉及表单参数、cookie,有时还有 AJAX 请求在内部进行到网页更新部分。

在 SO 上有很多“我无法抓取这个网站”的问题,虽然我们可以为您提供这个确切问题的准确答案,但我确实觉得如果我们只是告诉您去,这个世界会更好了解 HTTP 协议、表单和 Cookie,然后您将了解如何更好地使用这些工具。

请注意,我从未见过不喜欢你抓取其内容的求职网站或金融网站 - 尽管我在该网站上看不到有关它的警告,但这并不意味着它不存在,我会小心违反使用条款和条件。否则你可能会发现你的所有请求都失败了。

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2015-09-08
    • 2016-04-14
    • 1970-01-01
    • 2013-01-12
    相关资源
    最近更新 更多