2016-08-13 10 views
1

Rのウェブをスクレイピングし、Rの検索キーワードを使用してGoogle検索のアクションを実行しようとしています。私はRCurlとXMLパッケージを使用してGoogle検索結果のリンクを取得することに部分的に成功しています。しかし、抽出したhrefリンクには不要な情報が含まれており、「URL」の形式ではありません。Rでウェブスクレイピングして取得したGoogleの検索リンクは、必要な形式ではありません

私が使用するコードは次のとおりです。

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

上記のコードは、しかし、彼らは以下の形式である、私の7のリンクを提供します:

[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を使用している場合、xpathステートメントの正規表現関数はより簡単なコードと高速なパフォーマンスを提供します。 – Paulb

+0

@hrbrmstr:ありがとうございました。私はそれを知らなかった。アプリケーションを介してインターネットから検索結果を取得する他の法的手段がありますか? –

答えて

2

出力(もXMLパッケージを使用していますが、こするに関連する便利な機能をたくさん持っている)rvestパッケージ

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(ごみに付いてくる)を '&'に分割し、結果の分割の最初の要素を取り、 '/ url?q ='を空に置き換えます。

希望すると助かります!

+0

ご返信ありがとうございます。それは問題を解決します。私はstrsplitオプションを検討していましたが、hrefノードをフェッチする際に何か間違っているのかどうか疑問に思っていました。 –

関連する問題