Rに、このページから石油およびガスリグに関するExcelファイルを自動的にダウンロードしてもらいたいです。「北米ロータリーリグカウントピボットテーブル(2011年2月-現在)」(2番目のオプション)をクリックしてファイルをダウンロードしますが、Rでこれを行う方法が見つからないようです。
手がかりはありますか?ありがとう!
注:残念ながら、download.file()の使用は機能していないようです。MS Excelでファイルを開こうとすると、拡張子が正しくないか、ファイルが破損しているというメッセージが表示されます。使用すると、Rでもこのエラーが発生しますreadxl::read_excel()
:エラー:評価エラー:unzGetCurrentFileInfoのzipfileでエラー-103
いくつかの助けにLIBSに
あなたが実際にのみ必要になりますdplyr
、purrr
、stringr、とxml2
。
library(tidyverse)
library(rvest)
#> Loading required package: xml2
#>
#> Attaching package: 'rvest'
#> The following object is masked from 'package:purrr':
#>
#> pluck
#> The following object is masked from 'package:readr':
#>
#> guess_encoding
library(htmltab)
library(xml2)
library(readxl)
一部のサイトでは部分リンクを使用しているため、この方法が好きです。
base <- "https://rigcount.bakerhughes.com"
url <- paste0(base, "/na-rig-count")
# find links
url_html <- xml2::read_html(url)
url_html %>%
html_nodes("a") %>%
html_attrs() %>%
bind_rows() -> url_tbl
hrefコンテンツを確認し、興味のあるパターンを見つけinspect
てください。ブラウザでも使用できます。これは非常に役立ちます。
url_tbl %>%
count(href)
#> # A tibble: 22 x 2
#> href n
#> <chr> <int>
#> 1 / 1
#> 2 /email-alerts 1
#> 3 /intl-rig-count 1
#> 4 /na-rig-count 1
#> 5 /rig-count-faqs 1
#> 6 /rig-count-overview 2
#> 7 #main-menu 1
#> 8 https://itunes.apple.com/app/baker-hughes-rig-counts/id393570114?mt=8 1
#> 9 https://rigcount.bakerhughes.com/static-files/4ab04723-b638-4310-afd9-… 1
#> 10 https://rigcount.bakerhughes.com/static-files/4b92b553-a48d-43a3-b4d9-… 1
#> # … with 12 more rows
おそらく、静的ファイルは良いパターンかもしれないことに気づきhref
ましたが、それから私はでより良いパターンを見つけましたtype
。
url_tbl %>%
filter(str_detect(type, "ms-excel")) -> url_xlsx
リストを作成します(余分なドット、スペース、特殊文字などのノイズを避けることを忘れないでください)誰かがそれらを避けるためのより良い方法を提案することを願っています
myFiles <- pull(url_xlsx, "href")
names <- pull(url_xlsx, "title")
names(myFiles) <- paste0(
str_replace_all(names, "[\\.\\-\\ ]", "_"),
str_extract(names, ".\\w+$")
)
# download data
myFiles %>%
imap(
~ download.file(
url = .x,
destfile = .y,
method="curl", # might be not necessary
extra="-k"
)
)
#> $`north_america_rotary_rig_count_jan_2000_-_current.xlsb`
#> [1] 0
#>
#> $`north_american_rotary_rig_count_pivot_table_feb_2011_-_current.xlsb`
#> [1] 0
#>
#> $`U.S. Monthly Averages by State 1992-2016.xls`
#> [1] 0
#>
#> $`North America Rotary Rig Counts through 2016.xls`
#> [1] 0
#>
#> $`U.S. Annual Averages by State 1987-2016.xls`
#> [1] 0
#>
#> $Workover_9.xls
#> [1] 0
reprexパッケージ(v0.3.0)によって2020-12-16に作成されました
これで、ファイルが表示される場合があります。
names(myFiles) %>%
map(
readxlsb:read_xlsb
) -> myData
お役に立てば幸いです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加