1
3

More than 3 years have passed since last update.

python でchromedriver使ってスクレイピング

Posted at

環境

  • macos Sierra ver.10.12.6
  • chrome ver.78.0.3904.97

やりたいこと

スクレイピング対策されているweb記事のスクレイピングの為に
pythonでchrome driverをheadlessで使い、スクレイピングしたい

前提知識

  1. ブラウザのdriverについて
    要は、ブラウザをGUIではなく、CUIで扱う為に必要なツールってことみたいです。

  2. 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を使うようにすると解決できるかもしれません

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3