2014-12-06 3 views
0

Я хочу опубликовать форму и использовать возвращаемые данные.R Curl Post Form

Page Я хочу получить данные есть: http://www.bigpara.com/analiz/mali-tablolar/

assetscrap <- function(sirket){ 
    a <- postForm("http://www.bigpara.com/analiz/mali-tablolar/", 
    Yil = "2013", Donem = "4", Kur = "TL", Cins = "1", Submit = "Getir", 
    HisseKod = sirket); 
    a <- htmlParse(a); 
    span <- xpathSApply(a, "//div[@class='maliTable']//li//span", xmlValue); 
    small <- xpathSApply(a, "//div[@class='maliTable']//li//small", xmlValue); 
    small <- gsub("[.]","",small); 
    small <- as.numeric(small); 
    cikti <- data.table(span, small); 
    cikti <- cikti[cikti$span == "AKTİF TOPLAMI" | cikti$span == "A K T İ F T O P L A M I"]; 
    cikti <- cikti[order(-small)]; 
    cikti <- cikti[1,]$small; 
} 

напр. когда я бегу assetscrap("FROTO") функция возвращает

* About to connect() to www.bigpara.com port 80 (#0) 
* Trying 83.66.15.71... * connected 
* Connected to www.bigpara.com (83.66.15.71) port 80 (#0) 
> POST /analiz/mali-tablolar/ HTTP/1.1 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 
Host: www.bigpara.com 
Accept: */* 
Referer: http://www.bigpara.com/analiz/mali-tablolar/ 
Content-Length: 627 
Expect: 100-continue 
Content-Type: multipart/form-data; boundary=----------------------------b1006fa82edf 

< HTTP/1.1 100 Continue 

< HTTP/1.1 200 OK 
< Cache-Control: private 
< Content-Length: 182029 
< Content-Type: text/html; Charset=UTF-8 
< Server: Microsoft-IIS/7.5 
< Set-Cookie: ASPSESSIONIDCCTSBQAT=HOOCGCIBDPNEJMFGGFGGHNPM; path=/ 
< X-Powered-By: ASP.NET 
< Date: Sat, 06 Dec 2014 14:00:12 GMT 
< Set-Cookie: NSC_cjhqbsb_iuuq_WJQ=ffffffff504a9f5645525d5f4f58455e445a4a42367f;Version=1;path=/;httponly 

< 
* Connection #0 to host www.bigpara.com left intact 

Что вещь я с видом? Я думаю, что я делаю все правильно, но сервер не отвечает на мой запрос

ответ

1

Почему вы говорите, сервер не отвечает? Вы получаете статус 200 (OK) и длину ответа 182 000 байт?

Запрос POST работает нормально. Ваша проблема находится в строке:

cikti <- cikti[cikti$span == "AKTİF TOPLAMI" | cikti$span == "A K T İ F T O P L A M I"]; 

, который возвращает 0 строк. Некоторые вещи неправильно здесь:

Во-первых, текст в span колонке перепутал кодирования:

head(Encoding(span),20) 
# [1] "UTF-8" "UTF-8" "UTF-8" "UTF-8" "unknown" "unknown" "UTF-8" "UTF-8" 
# [9] "UTF-8" "UTF-8" "UTF-8" "unknown" "UTF-8" "UTF-8" "UTF-8" "unknown" 
# [17] "UTF-8" "UTF-8" "UTF-8" "unknown" 

Вы можете исправить это с помощью

span <- iconv(span,from="UTF-8",to="") 

сразу после извлечения span строк.

Во-вторых, ваше второе состояние: cikti$span == "A K T İ F T O P L A M I" не существует в cikti. Между словами есть 3 пробела, например, "A K T İ F T O P L A M I".

В-третьих, data.tables не являются кадрами данных. это очень плохая практика, чтобы использовать, например,

cikti <- cikti[cikti$span == "AKTİF TOPLAMI" ...] 

Вместо этого используйте:

cikti <- cikti[span == "AKTİF TOPLAMI" ...] 

Подвижной все вверх, этот код workds (на моей системе ...).

a <- postForm("http://www.bigpara.com/analiz/mali-tablolar/", 
       Yil = "2013", Donem = "4", Kur = "TL", Cins = "1", Submit = "Getir", 
       HisseKod = sirket) 
a <- htmlParse(a) 
span <- xpathSApply(a, "//div[@class='maliTable']//li//span", xmlValue) 
span <- iconv(span,from="UTF-8",to="") 
small <- xpathSApply(a, "//div[@class='maliTable']//li//small", xmlValue) 
small <- gsub("[.]","",small) 
small <- as.numeric(small) 
cikti <- data.table(span, small) 
cikti <- cikti[span == "AKTİF TOPLAMI" | span == "A K T İ F T O P L A M I"] 
cikti <- cikti[order(-small)]        
cikti <- cikti[1,]$small 
+0

Да вы правы насчет ответа. Я хотел подписать «* Connection # 0 для размещения на сайте www.bigpara.com left intact». На самом деле сервер возвращает ответ, но когда я изменяю переменную «sirket», возврат не изменяется. Если вы введете эту ссылку и отправьте сообщение вручную, таблица изменится. Но когда я отправляю эту форму с R, возвращаемая страница всегда такая же. Публикация формы не работает. – Sab

+0

Я забыл добавить. Например, вы можете попробовать «FROTO» и «FENER», чтобы сравнить их. Функция вернет одно и то же значение, но это не так. – Sab

0

Если вы не хотите возиться с кодировками, HTTR и rvest это за вас автоматически:

res <- POST("http://www.bigpara.com/analiz/mali-tablolar/", 
    body = list(
    Yil = "2013", 
    Donem = "4", 
    Kur = "TL", 
    Cins = "1", 
    HisseKod = "FENER" 
), 
    encode = "form" 
) 

mali_table <- html(res) %>% html_nodes("div.maliTable li") 

span <- mali_table %>% html_nodes("span") %>% html_text() 

small <- mali_table %>% 
    html_nodes("small") %>% 
    html_text() %>% 
    gsub("\\.", "", .) %>% 
    as.numeric() 

selected <- span %in% c("AKTİF TOPLAMI", "A K T İ F T O P L A M I") 

data.frame(
    span = span[selected], 
    small = small[selected] 
) 
+0

У меня все еще такая же проблема: при вводе на страницу http://www.bigpara.com/analiz/mali-tablolar/, страница по умолчанию: Hisse: DOHOL, 2014, 9, TL, Standart, что означает (Yil = "2014", Donem = "3", Kur = "TL", Cins = "1", HisseKod = "DOHOL") для значений. Я изменяю эти значения в R и отправляю форму. Но все же я получаю тот же результат. Для примера.вы можете попытаться изменить переменную «Yil». Сделайте это 2012 или 2011. Результат будет таким же, потому что почтовая форма не работает таким образом. – Sab

+0

Ну, вам нужно диагностировать, что браузер по-другому - я бы посоветовал узнать, как использовать веб-инспектор в вашем браузере. Нелегко понять, как работает веб-сайт, когда вы не говорите на этом языке. – hadley

+0

После того как вы сказали это, я попробовал это с PHP, и это сработало. Когда я ставлю 2013 год как значение «Yil», он возвращает страницу 2013 года, но в R, она возвращает все ту же страницу (DOHOL, 2014,3, TL, 1). Итак, я думаю, что моя проблема заключается не в HTML, а в том, как это делается в R. – Sab