#環境
- macos Sierra ver.10.12.6
- chrome ver.78.0.3904.97
#やりたいこと
スクレイピング対策されているweb記事のスクレイピングの為に
pythonでchrome driverをheadlessで使い、スクレイピングしたい
#前提知識
-
ブラウザのdriverについて
要は、ブラウザをGUIではなく、CUIで扱う為に必要なツールってことみたいです。 -
DNSサーバーとlocalのhostsの関係
私たちがブラウザでドメイン名からアクセスすると、DNSサーバーにその情報を聞いて、IPアドレスとして帰ってきてPCはそれを使ってWEBサイトにアクセスして、ブラウザでサイトが表示されます。
しかし、MacのhostsファイルにドメインとIPアドレスの紐付けを行って置くと、DNSサーバーに接続せずにIPアドレスを取ってくることができます。
参考記事
SeleniumとGoogle Spreadsheets(4) 「Chrome Driverを使いはじめるまで編
DNSサーバーについてはこの記事、
【図解】DNSサーバーとは?設定・変更と確認方法
hostsファイルについてはこの記事がおすすめです。
Macでhostsファイルを書き換え・編集する方法!反映されないときはどうすれば?
#前準備
##hostsファイルの中身確認
ファイルを開きます。
$sudo vi /etc/hosts
次にhostsファイルの中身がこのようになっていることを確認。
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
あとseleniumのサイトからアプリケーションに入っているchromeのバージョンと同じバージョンのdriverをインストールしましょう。(私の場合は78.0.3904.97でした。)
ChromeDriver - WebDriver for Chrome
#ソースコード
# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
if __name__ == '__main__':
base = "スクレイピングしたサイトのurl"
options = Options()
#headless指定
options.add_argument('--headless')
driver = webdriver.Chrome(executable_path='chrome driverがあるディレクトリの絶対パス', chrome_options=options)
driver.get(url)
#エンコード
html = driver.page_source.encode('utf-8')
#インスタンス化
soup = BeautifulSoup(html, 'html.parser')
普段はurllib.requestを使っているのですが
スクレイピング対策しているサイトにはこのseleniumを使うようにすると解決できるかもしれません
!