今週も特にありません

進捗どうですか?

rvestでUser Agentを偽装する

「偽装する」というと感じが悪いですが、いつも使っているChromeSafariなどのブラウザで表示される同じ状態をスクレイプしたかったということで、rvestでのユーザーエージェントの変更の仕方を調べたメモ。

github.com

結論としては、rvest::html_session(url, ...)...の部分にセットすれば、httr::GET(url = NULL, config = list(), ..., handle = NULL)のconfigにセットするようになっていました。

library(tidyverse)
library(rvest)
library(httr)

URL <- "http://had.co.nz"
UA <- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
session <- rvest::html_session(URL, httr::user_agent(UA))

Status CodeとUser Agentを確認します。

> session
<session> http://hadley.nz/
  Status: 200
  Type:   text/html
  Size:   8981

> session$config
<request>
Options:
* useragent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
* autoreferer: 1

> session %>% 
+     html_node(xpath = '//*[@id="page-top"]/footer/div/div/div/p/a[2]') %>%
+     html_text(trim = TRUE)
[1] "@hadleywickham"

当然ながら、User Agentだけではなく、httr::set_cookiesを利用すれば、Cookieもセットすることができます。

COOKIE1 <- "www"
COOKIE2 <- "zzz"
session <- rvest::html_session(URL, httr::user_agent(UA), httr::set_cookies(w = COOKIE1, z = COOKIE2))

以下のように、Cookie部分が追加されていることが確認できます。

> session$config
<request>
Options:
* useragent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
* cookie: w=www;z=zzz
* autoreferer: 1

html_sessionの実装場所は以下になります。 github.com