盖丽卡是法国国家数字图书馆。我正在研究1916年出版的法国报纸“西部日报”。
Gallica有一个API,我可以通过以下网址获得1916年所有问题的所有ids (ark)和dayOfYear的列表:
https://gallica.bnf.fr/services/Issues?ark=ark:/12148/cb41193663x/date&date=1916
# ark is the identifier of the newspaper
例子:
<issue ark="bpt6k567105k" dayOfYear="1">01 janvier 1916</issue>
我试图将输出解析为dataframe,而不使用XML包获得成功:
library(XML)
data <- xmlParse("https://gallica.bnf.fr/services/Issues?ark=ark:/12148/cb41193663x/date&date=1916")
xml_data <- xmlToList(data)
R给出了这个错误:
Error: XML content does not seem to be XML: 'https://gallica.bnf.fr/services/Issues?ark=ark:/12148/cb41193663x/date&date=1916'
发布于 2019-11-20 09:10:39
XML看起来像:
<issues compile_time="0:00:14.417" date="1916" list_type="issue" parent_ark="ark:/12148/cb41193663x/date">
<issue ark="bpt6k567105k" dayOfYear="1">01 janvier 1916</issue>
<issue ark="bpt6k567106z" dayOfYear="2">02 janvier 1916</issue>
...
</issues>
我们可以提取属性(ark
和dayOfYear
)和内容(litteral ),方法是获取所有子元素(xml_find_all(".//issue"
),然后将所有作为数据date (map_df
)构建的元素组装为一行:
library(httr)
library(xml2)
library(tidyverse)
r <- GET("https://gallica.bnf.fr/services/Issues?ark=ark:/12148/cb41193663x/date&date=1916")
r %>%
content() %>%
xml_find_all(".//issue") %>%
map_df(~ c(as.list(xml_attrs(.x)), date_parution = xml_text(.x)))
结果:
# A tibble: 366 x 3
ark dayOfYear date_parution
<chr> <chr> <chr>
1 bpt6k567105k 1 01 janvier 1916
2 bpt6k567106z 2 02 janvier 1916
3 bpt6k567107b 3 03 janvier 1916
4 bpt6k567108q 4 04 janvier 1916
5 bpt6k5671093 5 05 janvier 1916
6 bpt6k5671101 6 06 janvier 1916
7 bpt6k567111d 7 07 janvier 1916
8 bpt6k567112s 8 08 janvier 1916
9 bpt6k5671135 9 09 janvier 1916
10 bpt6k567114j 10 10 janvier 1916
# ... with 356 more rows
如果您有代理,请使用:
GET("https://gallica.bnf.fr/services/Issues?ark=ark:/12148/cb41193663x/date&date=1916",
use_proxy("your.proxy.address",
port = 8080,
username = "user",
password = "password"))
https://stackoverflow.com/questions/58949537
复制相似问题