2016-08-13 10 views
1

Я новичок в веб-очищении в R и пытаюсь запустить действие поиска Google, используя поисковый запрос из R и извлекать ссылки автоматически. Я частично успешно получаю ссылки на результаты поиска google, используя RCURL и пакет XML. Однако ссылки href, которые я извлекаю, включают нежелательную информацию и не соответствуют формату «URL».Поисковые ссылки Google для поиска по webscraping в R не в нужном формате

код я использую:

html <- getURL(u) 
links <- xpathApply(doc, "//h3//a[@href]", xmlGetAttr, 'href') 
links <- grep("http://", links, fixed = TRUE, value=TRUE) 

Приведенный выше код дает мне семь ссылок, однако, они находятся в указанном ниже формате:

[1] "/url?q=http://theguitarrepairworkshop.com/services/&sa=U&ved=0ahUKEwiOnNXzsr7OAhWHAMAKHX_LApYQFggmMAM&usg=AFQjCNF1r13FMHXXTsxMkbwzortiWKDALQ" 

Я предпочел бы, чтобы они были:

http://theguitarrepairworkshop.com/services/ 

Как извлечь href, как указано выше?

+0

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

+0

* Использует ли RCURL/XML-пакет Xpath 1.0 или Xpath 2.0? * Если он использует 2.0, функция regex в инструкции xpath даст более простой код и более высокую производительность. – Paulb

+0

@hrbrmstr: Спасибо, что сообщили мне. Я не знал об этом. Существуют ли другие юридические альтернативы для получения результатов поиска из Интернета через приложение. –

ответ

2

Использование rvest пакета (который также использует XML пакет, но имеет много удобных функций, связанных с выскабливание)

library(rvest) 
ht <- read_html('https://www.google.co.in/search?q=guitar+repair+workshop') 
links <- ht %>% html_nodes(xpath='//h3/a') %>% html_attr('href') 
gsub('/url\\?q=','',sapply(strsplit(links[as.vector(grep('url',links))],split='&'),'[',1)) 

Выход:

[1] "http://theguitarrepairworkshop.com/"                 
[2] "http://www.justdial.com/Delhi-NCR/Guitar-Repair-Services/ct-134788"          
[3] "http://www.guitarrepairshop.com/"                  
[4] "http://www.guitarworkshoponline.com/"                 
[5] "http://www.guitarrepairbench.com/guitar-building-projects/guitar-workshop/guitar-workshop-project.html" 
[6] "http://www.guitarservices.com/"                   
[7] "http://guitarworkshopglasgow.com/pages/repairs-1"              
[8] "http://brightonguitarworkshop.co.uk/"                 
[9] "http://www.luth.org/resources/schools.html" 

Четвертая строка в коде чистит текст. Сначала разбивает полученный URL (который поставляется с мусором) wrt '&', а затем берет первый элемент полученного split и заменяет '/ url? Q =' пустым.

Надеюсь, это поможет!

+0

Большое спасибо за ваш ответ. Это решает проблему. Я рассматривал вариант strsplit, однако, задавался вопросом, не делал ли я что-то неправильно в выборе узлов href. –

 Смежные вопросы

  • Нет связанных вопросов^_^