Seleniumを使用したwebスクレイピング 005
前回(004)からの追加機能
- ページ遷移を実装する事で2ページ目以降のランキングも取得する(結果実装できてない。。)
上記した通り今回はページ遷移後のデータ取得はできていない。
原因としては、1ページ目では取得可能だったDOMが存在していないとのエラーだった。
1ページ目と2ページ目ではランキングを出力するDOMの構成は同じだったので存在しない訳はない。。
→おそらく、ページを認識する前にDOMの解析処理が実施されていると推測。
次回はページ読み込みまでの待機処理の実装を紹介していきたい。
今回使用したページング処理には以下の種類が便利
●ページ遷移
driver.get("URL")
●一つ前に戻る
driver.back()
●一つ進む
driver.forward()
●ページ更新
driver.refresh()
●現在のURL取得
driver.current_url
●現在のタイトル取得
driver.title
●ページソースの取得
driver.page_source
from selenium import webdriver
import chromedriver_binary
import csv
import copy
import sys
import configparser #モジュールのインポート
search_list=''
config = configparser.ConfigParser() #インスタンス生成
config.read('config.ini') #読み込む設定ファイル
section1 = 'url'#セクションの指定
#指定したセクションから対象の値を取得
book_list = config.get(section1, 'book_list')
game_list = config.get(section1, 'game_list')
apparel_list = config.get(section1, 'apparel_list')
hobby_list = config.get(section1, 'hobby_list')
def SearchList():
#コマンドラインからの入力取得
while 1:
try:
input_list = input("検索したい欲しいものリストの番号を入力してください。\n1:本\n2:ゲーム\n3:アパレル\n4:おもちゃ\n※終了の場合はCtr + C\n")
if input_list is "1":
search_list = book_list
break
elif input_list is "2":
search_list = game_list
break
elif input_list is "3":
search_list = apparel_list
break
elif input_list is "4":
search_list = hobby_list
break
except KeyboardInterrupt: #Crt-Cが入力された場合
print("終了")
sys.exit()
driver = webdriver.Chrome()
driver.get(search_list)
contents = driver.find_elements_by_class_name('p13n-sc-truncated') #商品名称の取得
lists = [] #2次元配列用
for page in range(1,2): #2ページ目まで取得
driver.get(search_list + "#" + str(page))
try:
i = 0
for i in range(1,21):
list = []
list.append(i)
list.append(contents[i].text)#ここが取れてない。。。
lists.append(copy.copy(list)) #値渡しするためコピー作成
list.clear
except:
print(sys.exc_info())
driver.quit()
driver.quit()
print(lists)
try:
f = open('output.csv', 'w')
writer = csv.writer(f, lineterminator='\n')
writer.writerows(lists)
f.close()
except:
f.close()
sys.exit()
if __name__ == '__main__':
SearchList()