2012-04-18 4 views
1

У меня есть ссылка, например this one, что я хотел бы извлечь данные из нее с помощью RCurl. Перед этим есть страница с отказом от ответственности, и мне нужно щелкнуть ее в моем браузере прежде чем я смогу оценить данные. Ранее я использую ниже скрипт, который из here, «обойти» Ограничение страницу и получить доступ к данным с помощью RCurl:Используйте RCURL, чтобы обойти «страницу отказа от ответственности», а затем выполните обрезку веб-сайта

pagesource <- getURL(url,.opts=curlOptions(followlocation=TRUE,cookiefile="nosuchfile")) 
doc <- htmlParse(pagesource) 

Он работает и раньше, но в последние несколько дней она не долго работают. На самом деле у меня нет большой идеи о том, что он делает, интересно, нужно ли мне что-то менять в curlOptions или переписать весь фрагмент кода?

Спасибо.

+0

Это фактический сайт, к которому вы пытаетесь получить доступ? Я думаю, что решение будет очень зависимым от сайта. –

+0

@Jeff да, это одна из страниц, которые я хочу получить – lokheart

ответ

1

Как я упоминал в своем комментарии, решение вашей проблемы полностью зависит от реализации «страницы отказа от ответственности». Похоже, что предыдущее решение использовало опции cURL, определенные более подробно here. В основном, то, что он инструктирует cURL, это предоставить файл фальшивых файлов cookie (именуемый «nosuchfile»), а затем следовать за перенаправлением заголовка, предоставленным сайтом, к которому вы пытались получить доступ. По-видимому, этот сайт был настроен таким образом, что если посетитель утверждал, что не имеет правильных файлов cookie, он немедленно перенаправляет посетителя на страницу отказа от ответственности.

Вам не удалось создать файл с именем «nosuchfile» в вашем рабочем каталоге, не так ли? Если нет, похоже, что целевой сайт изменил способ работы страницы отказа от ответственности. Если это так, мы не можем помочь, если у нас нет реальной страницы, к которой вы пытаетесь получить доступ к диагностике.

В примере, который вы ссылаетесь в своем вопросе, они используют Javascript для перехода от заявления об отказе от ответственности, что может быть непростым, чтобы пройти мимо.

Для примера вы упоминаете, однако ...

  1. Откройте его в Chrome (или Firefox с Firebug)
  2. правой кнопкой мыши на каком-то пустом месте страницы и выберите «Просмотр кода элемента»
  3. Перейдите на вкладку «Сеть»
  4. Если есть контент, нажмите кнопку «Очистить» внизу, чтобы выгрузить страницу.
  5. Принимать лицензионное соглашение
  6. Смотреть весь трафик, который встречается по сети. В моем случае лучший результат был интересным. Если вы щелкните по нему, вы можете просмотреть его, чтобы убедиться, что это действительно документ HTML. Если вы нажмете на вкладке «Заголовки» в этом элементе, она покажет вам «URL-адрес запроса». В моем случае это было: http://bank.hangseng.com/1/PA_1_1_P1/ComSvlet_MiniSite_eng_gif?app=eINVCFundPriceDividend&pri_fund_code=U42360&data_selection=0&keyword=U42360&start_day=30&start_month=03&start_year=2012&end_day=18&end_month=04&end_year=2012&data_selection2=0

Вы можете получить доступ к этому URL-адресу напрямую, не принимая никаких лицензионных соглашений вручную или из cURL.

Обратите внимание, что если вы уже приняли соглашение, на этом сайте хранится файл cookie с указанием, который необходимо будет удалить, чтобы вернуться на страницу лицензионного соглашения. Вы можете сделать это, щелкнув вкладку «Ресурсы», затем перейдя в «Cookies» и удалив каждый из них, а затем обновив URL, который вы указали выше.