前提・実現したいこと
私は、webスクレイピングの勉強をしております。現在、https://prtimes.jp/main/html/searchbiscate/busi_cate_id/003/lv2/11 のサイトから、更新時間、企業名、更新内容のタイトルを取得し、リスト化しようとしております。
このサイトは下にスクロールすると、’もっと見るボタン’があり、それをクリックするとさらにデータが表示されます。今回は練習として、15回程クリックして、そこに表示されたデータをリスト化し,そのデータをpandasを用いて、DataFrame化csvに書き出しをしようとしております。
現在、リスト化まではしております。printでは、データが表示されており、取得までできているのですが、そのデータをDataFrameにしようとすると、取得したデータがnoneとして出力されてしまいます。何が間違っているのかご教授いただけると幸いです。
■■な機能を実装中に以下のエラーメッセージが発生しました。
csvに出力する前に、DataFrameをprintしたターミナル結果
[['2021-01-09T10:02:46+0900'], {'found_datetime': ['2021-01-09T10:02:46+0900'], 'found_company': '\n 株式会社リアライズ\n ', 'found_title': '<魔法科高校の劣等生 来訪者編より、【魔法科高校の劣等生 来訪者編】司波深雪、七草真由美のパーカーが新発売>1月8日より予約販売開始!'}, ['2021-01-09T10:02:11+0900'], {'found_datetime': ['2021-01-09T10:02:11+0900'], 'found_company': '\n 株式会社リアライズ\n ', 'found_title': '<魔法科高校の劣等生 来訪者編より、【魔法科高校の劣等生 来訪者編】司波深雪 Ani-Art フルグラフィックTシャツが新発売>1月8日より予約販売開始!'}, ['2021-01-09T10:01:22+0900'], {'found_datetime': ['2021-01-09T10:01:22+0900'], 'found_company': '\n 株式会社リアライズ\n ', 'found_title': '<進撃の巨人より、進撃の巨人 メタルキーホルダー/エレン リヴァイが新発売>1月8日より予約販売開始!'}, ['2021-01-09T09:03:31+0900'], {'found_datetime': ['2021-01-09T09:03:31+0900'], 'found_company': '\n 大運株式会社\n ', 'found_title': '【マスクを着けてコロナ対策‼】ウイルス99%カットフィルターで徹底ブロック‼ 大好評の女性・こども用高品質不織布マスクが1月9日より特別価格の1箱(50枚入)345円‼お買い求めやすくなりました。'}, ['2021-01-09T09:00:00+0900'], {'found_datetime': ['2021-01-09T09:00:00+0900'], 'found_company': '\n カラフル株式会社\n ', 'found_title': '【日本最安値の51枚298円マスクでコロナ感染拡大を止めたい】2021人シェア買いで51枚入りマスクが1セット298円(税込/送料無料)!日本最安値!'},・・・・・ ・・・,['2020-12-22T11:00:05+0900'], {'found_datetime': ['2020-12-22T11:00:05+0900'], 'found_company': 'Shopify Japan 株式会社', 'found_title': '「Shopifyコマースアワード2020」開催決定~Shopifyパートナー企業を通じて1月末まで募集~'}, ['2020-12-22T11:00:05+0900'], {'found_datetime': ['2020-12-22T11:00:05+0900'], 'found_company': 'natural tech株式会社', 'found_title': '【原料〜製作までサプリの全てを公開!】温活もできる妊活葉酸サプリmitasがサイトリニューアル'}, ['2020-12-22T11:00:00+0900'], {'found_datetime': ['2020-12-22T11:00:00+0900'], 'found_company': '株式会社ベルーナ', 'found_title': '即おしゃれ見えで着こなしに差がつく、春先まで使える最旬コーディネート\u3000GeeRA 春のレイヤードコレクション\u3000 '}, ['2020-12-22T11:00:00+0900'], {'found_datetime': ['2020-12-22T11:00:00+0900'], 'found_company': 'クックパッド株式会社', 'found_title': 'クックパッドマート、ドラッグストア「スギ薬局」へ導入開始〜生鮮宅配ボックス「マートステーション」は331箇所まで拡大〜'}, ['2020-12-22T11:00:00+0900'], {'found_datetime': ['2020-12-22T11:00:00+0900'], 'found_company': 'Emma Sleep Japan合同会社\u3000\u3000\u3000\u3000', 'found_title': '20カ国、100万人以上が愛用するマットレス 睡眠先進国ドイツ発 エマ・スリープ 12月22日、日本上陸'}] 0 1 2 0 2021-01-09T10:02:46+0900 None None 1 found_datetime found_company found_title 2 2021-01-09T10:02:11+0900 None None 3 found_datetime found_company found_title 4 2021-01-09T10:01:22+0900 None None ... ... ... ... 1275 found_datetime found_company found_title 1276 2020-12-22T11:00:00+0900 None None 1277 found_datetime found_company found_title 1278 2020-12-22T11:00:00+0900 None None 1279 found_datetime found_company found_title [1280 rows x 3 columns]
該当のソースコード
python
1#ライブラリのimport 2from bs4 import BeautifulSoup 3import urllib.request as req 4import pandas as pd 5from selenium import webdriver 6import chromedriver_binary 7import datetime 8from datetime import date 9from datetime import timedelta 10import time 11import numpy as np 12 13#googlechromeを起動 14browser = webdriver.Chrome() 15#chromeドライバーが見つかるまでの待ち時間を設定 16browser.implicitly_wait(3) 17 18#ページサイトへアクセス 19 20#urlの指定 21url = 'https://prtimes.jp/main/html/searchbiscate/busi_cate_id/003/lv2/11' 22#指定したurlへ遷移する 23browser.get(url) 24 25#urlへ遷移する前に下の処理に行かないための記述 26time.sleep(3) 27 28x = 1 29while x <= 15: 30 #クリックの動作を入力 31 #find_element_by_idはhtmlのidの要素を指定して入力できる 32 browser_from = browser.find_element_by_id('more-load-btn-view') 33 time.sleep(3) 34 browser_from.click() 35 print('クリックしました') 36 x = x + 1 37 38#指定したウェブサイトのhtmlを取得する 39##response = req.urlopen(url) 40 41##parse_html = BeautifulSoup(response, 'html.parser') 42##parse_html 43 44#ボタンクリック後、この部分で「urllib.request」を使用してHTMLを再取得しているので、Ajax取得したHTMLが取れてません。urllibは静的なHTML取得にしか使えません。 45#以下のようにAjax後のレスポンスを待ってからSeleniumドライバからHTMLを取得したらどうでしょうか。 46# ~ボタンクリック後 47 48time.sleep(3) 49parse_html = BeautifulSoup(browser.page_source, 'html.parser') 50 51#aタグの一覧から複数のクラス名を[]で指定して取得する 52found_lists = parse_html.find_all('article' ,class_= 'item item-ordinary') 53 54 55 56found_articles = [] 57 58for article in found_lists: 59 datetime = article.find('time', class_='time-release time-release-ordinary icon-time-release-svg') 60 found_datetime = datetime['datetime'] 61 found_articles.append(found_datetime.split()) 62 found_company_a = article.find('a', class_='link-name-company name-company name-company-ordinary') 63 found_company =found_company_a.text 64 found_title_a =article.find('a', class_='link-title-item link-title-item-ordinary') 65 66 67 68 69 70 article={ 71 'found_datetime':found_datetime.split(), 72 'found_company':found_company_a.contents[0], 73 'found_title':found_title_a.contents[0] 74 } 75 found_articles.append(article) 76#------------------------------------------------------------- 77print(found_articles) 78 79#データフレームにデータを書き出す。 80df_found = pd.DataFrame(found_articles) 81 82#欠損値を除く 83df_notnull = df_found.dropna(how = 'any') 84df_notnull 85 86#csvへの書き込み 87df_found.to_csv('output_02.csv')
試したこと
pandasを用いて、datafreme化
補足情報(FW/ツールのバージョンなど)
Python 3.6.0 lxml4.6.2 pandas0.25.3 datetime
ここにより詳細な情報を記載してください。
変換したいデータを取得したホームページ https://prtimes.jp/main/html/searchbiscate/busi_cate_id/003/lv2/11 (注:これは、スクレイピングの練習のために、書いているコードなので、データ自体はなんでも構いません
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー