js 사이트를 스크래핑하면 selenium보다 splash!
동기 부여
js로 구성된 사이트를 스크래핑하고 싶다고 생각했을 때 selenium이 defact의 선택으로 들 수 있다고 생각합니다.
그러나 selenum을 포함한 헤드리스 브라우저는 브라우징이 들어오기 때문에 처리가 너무 느려집니다. 많은 양의 페이지를 스크래핑하는 용도에는 적합하지 않습니다.
거기서, 사이트를 확실히 브라우징하면서도 퍼포먼스를 양립하는 헤드리스 브라우저라고 하는 요건으로 selenum의 대신을 찾아내고 있었는데, splash에 시라바네의 화살이 서 있었습니다.
splash란?
scrapy의 개발원인 scrapinghub사가 개발하고 있는 스크래핑에 특화한 헤드리스 브라우저입니다.
splash는 다른 헤드리스 브라우저와는 모색이 달라 Docker로 배포되는 HTTP API입니다.
문서 에도 써있듯이
- 並列でページを処理する
- ページレンダリング速度を上げるためにアドブロックや画像表示をオフにできる
- Luaで細かいブラウジング用のスクリプトをかける
같은 스크래핑에 기쁜 기능이 많이 담겨 있습니다.
만져보기
문서 과 같이 docker를 통해 설치해 봅시다.
docker pull scrapinghub/splash
docker run -p 8050:8050 -p 5023:5023 scrapinghub/splash
그러면
localhost:8050
에서 splash UI에 액세스할 수 있습니다.이 UI에서 splash API를 두드리는 요청을 시도할 수 있습니다.
사이트를 방문해 보세요.
우선은 UI상의
Render me!
버튼을 시도해 보세요.아래와 같이 splash를 실행한 결과를 볼 수 있습니다.
기본적으로 제공되는 브라우징을 위한 Lua 스크립트는 다음과 같습니다.
function main(splash, args)
assert(splash:go(args.url))
assert(splash:wait(0.5))
return {
html = splash:html(),
png = splash:png(),
har = splash:har(),
}
end
여기에
라고 하는 처리가 기술되고 있습니다.
브라우징 스크립트 작성
Lua의 브라우징 스크립트를 작성해 봅시다.
아래는 부동산 사이트의 도도부현을 선택하는 페이지를 방문하여 부동산 등록 매물 목록 페이지를 얻는 스크립트입니다.
방금 전의 Google 링크를
http://chintai.mhe.co.jp/search/area.php?area_cd=03
로 다시 작성하고 스크립트 항목을 아래에 다시 작성하십시오.function main(splash)
splash:go(splash.args.url)
local area = splash:select('.items input#id11')
area:click()
local submit_area = splash:select('.tools-wrap input[type=image]')
submit_area:click()
while not splash:select('input[alt="検索結果を見る"]') do
splash:wait(0.1)
end
local city = splash:select('h4.city_name input#id_saitama')
city:click()
local submit_city = splash:select('section.button input[type=image]')
submit_city:click()
while not (splash:select('section.pager-head') and splash:select('form#search_form')) do
splash:wait(0.1)
end
return {html = splash:html(), png = splash:png()}
end
여기에
라고 하는 처리가 기술되고 있습니다.
실행 결과는 다음과 같습니다.
요약
위와 같이 Lua 언어로 미세한 브라우징 거동 설명 수 있습니다.
또한 splash는 기본적으로 병렬 처리를 지원하므로 splash API에 여러 요청을 보낸 경우에도 브라우징을 효율적으로 처리합니다.
그리고, splash API에 대한 요청을 래핑하는 scrapy 플러그인 도 있으므로, 좋으면 꼭 해 보세요.
Reference
이 문제에 관하여(js 사이트를 스크래핑하면 selenium보다 splash!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KentFujii/items/7ccf05f1922c3c602df4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)