【问题标题】:web scraping a webpage with multiple tabs in R在R中抓取具有多个标签的网页
【发布时间】:2013-07-09 06:17:03
【问题描述】:

我试图从以下网页中抓取 R 中的到期日期数据:https://www.theice.com/productguide/ProductSpec.shtml?specId=251#expiry。此页面包含多个选项卡,到期日期只是其中之一。我使用的代码是

library(RCurl)
Canola <- 'https://www.theice.com/productguide/ProductSpec.shtml?specId=251#expiry'
WS <- getURL(Canola,ssl.verifypeer=FALSE)
library(XML)
ParsedData <- htmlParse(WS)
CanolaExpDate <- readHTMLTable(ParsedData)
names(CanolaExpDate)

然而,最终输出是第一个标签产品规范上的交易时间。

我是网络抓取的新手,对html不了解。请指教。

【问题讨论】:

  • 你能显示预期的输出吗?
  • 我想在 data.frame 中包含到期日期选项卡上的所有数据
  • 你想加入你的CanolaExpDate列表吗? CanolaExpDate$tradingHours??
  • 我不想要交易时间,我需要到期日信息。基本上,我抓取了错误的数据。交易时间数据在产品规格选项卡上,我想要的数据在到期日期选项卡上。
  • 是的,我知道您想要到期日期。我不清楚哪些数据是到期日(并非所有人都有财务背景)。也就是说,您的意思是提取链接中提到的表格中的所有日期吗?哪一栏? FTD?LTD?....这就是我要求预期输出的原因。

标签: html r web-scraping


【解决方案1】:

我在该页面的源代码中搜索了“过期”,并查看了 URL 是如何形成的。添加&amp;expiryDates 而不是#expiry 会生成更易于解析的表格。

library(RCurl)
library(XML)
Canola <- "https://www.theice.com/productguide/ProductSpec.shtml?specId=251&expiryDates"
WS <- getURL(Canola)
x <- readHTMLTable(WS, stringsAsFactors=FALSE)
as.data.frame(lapply(x[[1]], as.Date, format="%a %b %d %X"))

#   Contract.Symbol        FTD        LTD        FND        LND        FDD        LDD Options.FTD Options.LTD
#1       2013-07-01 2013-05-16 2013-07-12 2013-06-28 2013-07-15 2013-07-02 2013-07-16        <NA>  2013-06-21
#2       2013-08-01 2013-03-25 2013-07-26 2013-07-31 2013-08-15 2013-08-01 2013-08-16        <NA>  2013-07-26
#3       2013-09-01 2013-08-27 2013-08-23 2013-08-30 2013-09-16 2013-09-03 2013-09-17        <NA>  2013-08-23
#4       2013-10-01 2013-05-27 2013-09-20 2013-09-30 2013-10-15 2013-10-01 2013-10-16        <NA>  2013-09-20
#5       2013-11-01 2013-07-15 2013-11-14 2013-10-31 2013-11-15 2013-11-01 2013-11-18        <NA>  2013-10-25
#6       2013-01-01 2013-11-15 2013-01-14 2013-12-31 2013-01-15 2013-01-02 2013-01-16        <NA>  2013-12-20
#7       2013-03-01 2013-01-17 2013-03-14 2013-02-28 2013-03-17 2013-03-03 2013-03-18        <NA>  2013-02-21
#8       2013-05-01 2013-03-15 2013-05-14 2013-04-30 2013-05-15 2013-05-01 2013-05-16        <NA>  2013-04-25
#9       2013-07-01 2013-05-15 2013-07-14 2013-06-30 2013-07-15 2013-07-02 2013-07-16        <NA>  2013-06-20
#10      2013-11-01 2013-07-16 2013-11-14 2013-10-31 2013-11-17 2013-11-03 2013-11-18        <NA>  2013-10-24
#11      2013-01-01 2013-11-15 2013-01-14 2013-12-31 2013-01-15 2013-01-02 2013-01-16        <NA>  2013-12-19
#12      2013-03-01 2013-01-15 2013-03-13 2013-02-27 2013-03-16 2013-03-02 2013-03-17        <NA>  2013-02-20
#13      2013-05-01 2013-03-15 2013-05-14 2013-04-30 2013-05-15 2013-05-01 2013-05-19        <NA>  2013-04-24
#14      2013-07-01 2013-05-15 2013-07-14 2013-06-30 2013-07-15 2013-07-02 2013-07-16        <NA>  2013-06-26

编辑:更多关于我如何找到上面使用的 URL。我实际上没有使用任何开发人员工具。我只是右键单击并选择“查看源代码”并搜索“到期”。有一个 app.urls 部分有这样的内容

'expiry':'/productguide/ProductSpec.shtml;jsessionid=C59BE223F113CFDD340BF23CC07EEFFC?expiryDates=&specId=251'

所以,我尝试省略 jsessionid 部分,然后转到

https://theice.com/productguide/ProductSpec.shtml?expiryDates=&specId=251

而且看起来很有趣。我只重新排序到https://www.theice.com/productguide/ProductSpec.shtml?specId=251&amp;expiryDates

因为我觉得这样的 URL 看起来更好。

【讨论】:

  • 找到&amp;expiryDates 可以使用chrome 中的开发人员工具找到的东西吗?您是如何在源代码中发现这一点的?
  • @GSee。效果很好,谢谢。@cyclondude,是的,您可以在开发人员工具中查看源代码并搜索“过期”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2016-08-09
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多