<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Python | みんたく</title>
	<atom:link href="https://mintaku-blog.net/category/develop/python/feed/" rel="self" type="application/rss+xml" />
	<link>https://mintaku-blog.net</link>
	<description>みんたくの技術ブログ</description>
	<lastBuildDate>Fri, 26 Jul 2019 07:48:11 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/06/cropped-ipad-820272_640.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Python | みんたく</title>
	<link>https://mintaku-blog.net</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">144480658</site>	<item>
		<title>【Python】Seleniumで検索結果をスクレイピングしてCSV出力する</title>
		<link>https://mintaku-blog.net/python-selenium/</link>
					<comments>https://mintaku-blog.net/python-selenium/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Tue, 23 Jul 2019 06:59:09 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1089</guid>

					<description><![CDATA[<p>Python+Seleniumで検索結果をスクレイピングしてCSV出力する方法を紹介します。とりあえず動かしてみたい方は参考程度にどうぞ。 事前準備 Sel …</p>
The post <a href="https://mintaku-blog.net/python-selenium/">【Python】Seleniumで検索結果をスクレイピングしてCSV出力する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Python+Seleniumで検索結果をスクレイピングしてCSV出力する方法を紹介します。とりあえず動かしてみたい方は参考程度にどうぞ。</p>
<h2>事前準備</h2>
<h3>Seleniumをインストール</h3>
<p></p><pre class="crayon-plain-tag">$ pip install selenium</pre><p></p>
<h3>WebDriverをダウンロードし、格納</h3>
<p>以下の公式サイトからChromeのWebDriverをダウンロードします。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://sites.google.com/a/chromium.org/chromedriver/downloads">Sign in - Google Accounts</a>
			</p>
										<div class="ys-blog-card__domain">sites.google.com</div>
					</div>
	</div>
</div>

<p>ダウンロードしたらZIPファイルを展開し、「chromedriver.exe」を適当な場所に格納します。</p>
<p>今回はCドライブ直角にdriverファルダを作成し、その配下に格納しました。</p><pre class="crayon-plain-tag">C:\driver\chromedriver.exe</pre><p></p>
<h2>検索キーワードからGoogle検索結果をスクレイピングする</h2>
<p>・searchGoogleResult.py</p><pre class="crayon-plain-tag">from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import csv
import time

# Chromeを開く
chrome = webdriver.Chrome("c:/driver/chromedriver.exe")
chrome.get('https://www.google.co.jp/')

# 検索ワード・取得ページ数入力
keyword = input("キーワード入力：")
per = input("何ページ目まで取得するか(数字入力)：")

# 検索実行
search_box = chrome.find_element_by_name("q")
search_words = keyword
search_box.send_keys(" ".join(search_words))
search_box.send_keys(Keys.RETURN)

# 検索結果取得
result = []
for i in range(int(per)):
    try:
        for target_title_url in chrome.find_elements_by_css_selector(".r &gt; a"):
            result.append(target_title_url.text)

        # 次ページ取得・遷移
        next = chrome.find_element_by_css_selector("#navcnt table td.cur + td a")
        next.click()
    except:
        chrome.close()

    # 5秒間スリープ
    time.sleep(5)

chrome.close()

# 検索結果をCSV出力
with open('[' + keyword + ']google_search_result.csv', 'w', newline='', encoding='CP932', errors='replace') as f:
    writer = csv.writer(f)
    writer.writerows([result])</pre><p></p>
<h3>スクレイピングの各処理を解説</h3>
<p>必要なモジュールをインポートします。</p>
<p>CSV出力とスリープのため「import csv」、「import time」を追加しています。</p><pre class="crayon-plain-tag">from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import csv
import time</pre><p>&nbsp;</p>
<p>先ほど格納したドライバーを呼び出し、Chromeを立ち上げます。</p><pre class="crayon-plain-tag">chrome = webdriver.Chrome("c:/driver/chromedriver.exe")
chrome.get('https://www.google.co.jp/')</pre><p>&nbsp;</p>
<p>inputから検索キーワードと取得ページ数を入力してもらいます。</p><pre class="crayon-plain-tag">keyword = input("キーワード入力：")
per = input("何ページ目まで取得するか(数字入力)：")</pre><p>&nbsp;</p>
<p>「chrome.find_element_by_name(&#8220;q&#8221;)」からname属性がqの検索ボックスを指定し、取得したキーワードの検索を実行します。</p><pre class="crayon-plain-tag">search_box = chrome.find_element_by_name("q")
search_box.send_keys(keyword)
search_box.send_keys(Keys.RETURN)</pre><p>&nbsp;</p>
<p>先ほど入力した取得ページ数から検索キーワードの検索結果を格納していきます。今回は、検索結果のタイトルとURLを取得しています。</p>
<p>try・exceptで囲っているため、次ページがない場合は格納処理を終了します。</p>
<p>また、短時間で複数回アクセスするとDos攻撃として認識されることがあるため、sleepメソッドを使って5秒間スリープしています。</p><pre class="crayon-plain-tag">result = []
for i in range(int(per)):
    try:
        for target_title_url in chrome.find_elements_by_css_selector(".r &gt; a"):
            result.append(target_title_url.text)
        next = chrome.find_element_by_css_selector("#navcnt table td.cur + td a")
        next.click()
    except:
        chrome.close()

    time.sleep(5)

chrome.close()</pre><p>&nbsp;</p>
<p>検索結果の取得終了後、CSV出力を実行します。</p><pre class="crayon-plain-tag">with open('[' + keyword + ']google_search_result.csv', 'w', newline='', encoding='CP932', errors='replace') as f:
    writer = csv.writer(f)
    writer.writerows([result])</pre><p>&nbsp;</p>
<p>実行する際は、作成したファイル直下に移動し、以下のコマンドを叩きます(searchGoogleResult.pyの部分は作成したファイル名に置き換える)。</p><pre class="crayon-plain-tag">$ python searchGoogleResult.py</pre><p>&nbsp;</p>
<h2>スクレイピングをHeadlessモードで実行する</h2>
<p>ブラウザの画面を表示せずに実行する場合は、Headlessモードを有効にすることで実現できます。</p><pre class="crayon-plain-tag">from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
chrome = webdriver.Chrome("c:/driver/chromedriver.exe", chrome_options=options)</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<div>
<div><strong>追記：クラス化・関数化・機能追加しました。</strong></div>
</div>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://opengraph.githubassets.com/5ee33064d175e047e2657cb0f31d6423f81f61c2ea6699e856fd7022f4339c8e/simanapo/selenium-scrape-sample" alt="">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://github.com/simanapo/selenium-scrape-sample/blob/master/seleniumScrapeSample.py">selenium-scrape-sample/seleniumScrapeSample.py at master · simanapo/selenium-scrape-sample · GitHub</a>
			</p>
							<div class="ys-blog-card__dscr">
					Contribute to simanapo/selenium-scrape-s&hellip;				</div>
										<div class="ys-blog-card__domain">github.com</div>
					</div>
	</div>
</div>The post <a href="https://mintaku-blog.net/python-selenium/">【Python】Seleniumで検索結果をスクレイピングしてCSV出力する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/python-selenium/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1089</post-id>	</item>
	</channel>
</rss>
