Очистка веб-страниц с помощью R-жилета не показывает правильную страницу после очистки

#r #web-scraping #rvest

Вопрос:

Я изучаю веб-очистку в R , я использовал следующий код для очистки некоторого содержимого из math.stackexchange, но когда я вижу последний вывод , он не показывает правильную страницу, также содержимое отличается, не могли бы вы помочь в этом, будет очень полезно.. спасибо

 library(rvest)  library(data.table)    link lt;- "https://math.stackexchange.com/questions/tagged/integration"  url lt;- read_html(link)   page lt;- url %gt;% html_nodes(".question-hyperlink") %gt;% html_text()  page questions_link lt;- url %gt;%   html_nodes("h3 a.question-hyperlink") %gt;%  html_attr("href") %gt;%   paste0("https://math.stackexchange.com", .)  get_answer = function(answer_link){  answer_page lt;- read_html(answer_link)  solution = answer_page %gt;% html_nodes(".accepted-answer") %gt;% html_text()   return(solution) }  solution_accepted lt;- sapply(questions_link, FUN = get_answer)   

Комментарии:

1. Вам нужны только ссылки, по которым принимаются ответы, или вам нужно содержание принятых ответов?

2. @bdedu : В моих окончательных данных мне нужны ответы на вопросы в одной колонке и только принятые ответы в другой колонке . Спасибо за ваш ответ..

3. Вас интересуют только принятые решения? Если это так, я бы предложил другой подход.

4. @QHarr : Да , мне нужно только принятое решение, окончательные данные будут содержать вопрос в одном столбце и принятый ответ в другом столбце.. там, где ответы не даны, он должен показывать NA или пустой.. пожалуйста, помогите мне в этом.. спасибо

5. @QHarr это также подойдет, если я получу таблицу формата вопросов и ответов, в одном столбце вопросы, а в другом-только ответы.. еще раз спасибо

Ответ №1:

 library(rvest) library(tidyverse)   link lt;- "https://math.stackexchange.com/questions/tagged/integration"   questions_link lt;- link %gt;%   read_html() %gt;%   html_nodes("h3 a.question-hyperlink") %gt;%  html_attr("href") %gt;%   paste0("https://math.stackexchange.com", .)  

get_answer Функция выдает ссылку на принятые ответы.

 get_answer = function(x){  aa = x %gt;% read_html() %gt;% html_elements('.accepted-answer') %gt;%  html_attr("id") %gt;% str_extract("[0-9] ")     accepted_link = paste0('https://math.stackexchange.com/a/', aa)  return(accepted_link) }  

Теперь, используя lapply, чтобы пройти через question_link ,

 accepted_link = lapply(questions_link, get_answer) %gt;% unlist() %gt;% str_replace_all('^https://math.stackexchange.com/a/

Создание фрейма данных со ссылками на вопросы и принятые ответы,

 df = data.frame(question = questions_link, accepted = accepted_link)  

Выход

 question 1 https://math.stackexchange.com/questions/4328052/solving-complex-line-integrals-using-cauchys-integral-formula-for-derivatives 2 https://math.stackexchange.com/questions/4328035/compute-int-0-infty-frace-ax-fracbxx3-2dx 3 https://math.stackexchange.com/questions/4328031/why-does-the-laplace-transform-shift-theorem-not-work-with-a-positive-shift 4 https://math.stackexchange.com/questions/4327779/explicit-elementary-primitive-integral-of-x-sqrtpx-and-galois-group-o 5 https://math.stackexchange.com/questions/4327770/how-resolve-int-infty-infty-frac-sin-xxidx 6 https://math.stackexchange.com/questions/4327737/show-that-in-lebesgue-theory-int-mathbbr2-f-sqrtx2y2-dxdy-2-pi 7 https://math.stackexchange.com/questions/4327729/why-does-integral-equation-for-arcsec-have-absolute-value-in-its-argument-rather 8 https://math.stackexchange.com/questions/4327713/is-there-some-trick-intuitive-quick-way-to-solve-this-integral-equation 9 https://math.stackexchange.com/questions/4327711/prove-that-int-ab-fx-dx-int-a-cb-c-fxcdx 10 https://math.stackexchange.com/questions/4327691/is-there-any-trick-to-finding-int-0-pi-4-cos-6x-cos7x-cosnx-dx 11 https://math.stackexchange.com/questions/4327665/theorem-6-20-of-baby-rudin 12 https://math.stackexchange.com/questions/4327659/how-to-calculate-the-definite-integral-arcsinx-dsinx-x-from0-to-1 13 https://math.stackexchange.com/questions/4327658/evaluate-int-infty0-fracxx3-1-mathrmdx-by-using-complex-an 14 https://math.stackexchange.com/questions/4327636/what-happens-when-we-change-the-order-of-integrals 15 https://math.stackexchange.com/questions/4327592/is-it-possible-to-solve-n-body-problem-if-only-one-body-is-moving-and-all-other  accepted 1 NA 2 https://math.stackexchange.com/a/4328059 3 NA 4 NA 5 https://math.stackexchange.com/a/4327785 6 NA 7 NA 8 NA 9 NA 10 https://math.stackexchange.com/a/4327755 11 NA 12 NA 13 NA 14 NA 15 NA  

Комментарии:

1. Привет, спасибо за ваш ответ, однако мне нужен фрейм данных, в котором первый столбец представляет вопрос, а второй столбец представляет принятый ответ ( а не только ссылку), не могли бы вы помочь мне в этом... еще раз спасибо..

2. Вам нужен текст принятого ответа?

3. да, мне нужны вопросы и ответы ( только текстовые), а не ссылки.. еще раз спасибо за ваш ответ...

, 'NA') Создание фрейма данных со ссылками на вопросы и принятые ответы,


Выход


Комментарии:

1. Привет, спасибо за ваш ответ, однако мне нужен фрейм данных, в котором первый столбец представляет вопрос, а второй столбец представляет принятый ответ ( а не только ссылку), не могли бы вы помочь мне в этом… еще раз спасибо..

2. Вам нужен текст принятого ответа?

3. да, мне нужны вопросы и ответы ( только текстовые), а не ссылки.. еще раз спасибо за ваш ответ…