Вы можете сделать тот же запрос, что и веб-страница, для динамического получения результатов (отображается на вкладке сети инструментов dev F12 .) Измените параметр DisplayLength на все результаты (1394) или установите для него начальный большое число и проверьте возврат, чтобы получить действительный общий счетчик результатов и выполнить любые дальнейшие запросы, необходимые для получения всех результатов.
Пока вы можете сделать простой запрос rvest
library(rvest)
url <- 'https://cancer.sanger.ac.uk/cosmic/gene/mutations?all_data=&coords=AA%3AAA&dr=&end=455&gd=&id=359910&ln=MYC&seqlen=455&src=gene&start=1&export=json&sEcho=2&iColumns=6&sColumns=&iDisplayStart=0&iDisplayLength=1394&mDataProp_0=0&sSearch_0=&bRegex_0=false&bSearchable_0=true&bSortable_0=true&mDataProp_1=1&sSearch_1=&bRegex_1=false&bSearchable_1=true&bSortable_1=true&mDataProp_2=2&sSearch_2=&bRegex_2=false&bSearchable_2=true&bSortable_2=true&mDataProp_3=3&sSearch_3=&bRegex_3=false&bSearchable_3=true&bSortable_3=true&mDataProp_4=4&sSearch_4=&bRegex_4=false&bSearchable_4=true&bSortable_4=true&mDataProp_5=5&sSearch_5=&bRegex_5=false&bSearchable_5=true&bSortable_5=true&sSearch=&bRegex=false&iSortCol_0=0&sSortDir_0=asc&iSortingCols=1'
r <- read_html(url) %>% html_node('p') %>% html_text()
write.table(r,file="data.txt", sep='\t', row.names = FALSE)
Отредактируйте @Snehal Patel, чтобы получить желаемый формат:
x = read.table("data.txt", sep = "\t", skip = 2, fill = TRUE)
colnames(x) = c("AA_Position", "CDS_Mutation", "AA_Mutation", "COSMIC_ID", "count", "Mutation_type")
С помощью httr, передавая различные заголовки и создавая фрейм данных из ответа.
library(httr)
library(purrr)
library(rvest)
headers = c(
'X-Requested-With' = 'XMLHttpRequest',
'User-Agent' = 'Mozilla/5.0',
'Referer' = 'https://cancer.sanger.ac.uk/cosmic/gene/analysis?ln=MYC'
)
params = list(
'coords' = 'AA:AA',
'end' = '455',
'id' = '359910',
'ln' = 'MYC',
'seqlen' = '455',
'src' = 'gene',
'start' = '1',
'export' = 'json',
'sEcho' = '4',
'iColumns' = '6',
'iDisplayStart' = '0',
'iDisplayLength' = '1394', #for all results. You can set to number higher than you expect then check first result for actual
'mDataProp_0' = '0',
'bRegex_0' = 'false',
'bSearchable_0' = 'true',
'bSortable_0' = 'true',
'mDataProp_1' = '1',
'bRegex_1' = 'false',
'bSearchable_1' = 'true',
'bSortable_1' = 'true',
'mDataProp_2' = '2',
'bRegex_2' = 'false',
'bSearchable_2' = 'true',
'bSortable_2' = 'true',
'mDataProp_3' = '3',
'bRegex_3' = 'false',
'bSearchable_3' = 'true',
'bSortable_3' = 'true',
'mDataProp_4' = '4',
'bRegex_4' = 'false',
'bSearchable_4' = 'true',
'bSortable_4' = 'true',
'mDataProp_5' = '5',
'bRegex_5' = 'false',
'bSearchable_5' = 'true',
'bSortable_5' = 'true',
'bRegex' = 'false',
'iSortCol_0' = '0',
'sSortDir_0' = 'asc',
'iSortingCols' = '1'
)
r <- content(httr::GET(url = 'https://cancer.sanger.ac.uk/cosmic/gene/mutations', httr::add_headers(.headers=headers), query = params)) %>%
.$aaData
df <- map_df(r, function(i) {
data.frame(
`Position` = read_html(i[[1]]) %>% html_node('a') %>% html_text() %>% as.numeric() ,
`CDS Mutation` = read_html(i[[2]]) %>% html_node('a') %>% html_text(),
`AA Mutation` = read_html(i[[3]]) %>% html_node('a') %>% html_text(),
`Legacy Mutation ID` = i[[4]],
`Count` = i[[5]] ,
`Type` = i[[6]] ,
stringsAsFactors=FALSE)
})