前提・実現したいこと
https://news.yahoo.co.jp/pickup/6375460 https://news.yahoo.co.jp/pickup/6375461 https://news.yahoo.co.jp/pickup/6375462 上記のような連続するURLから特定のタグだけスクレイピングをしCSVで保存したいのです。 理想は、CSVを開いたときに ニュースリスト 0,アップル、11月11日に特別イベント「One more thing.」--AppleシリコンMac登場か? 1,DeNAが藤岡、石川ら7選手に戦力外通告 2,「エンジンの調子が悪かった」超軽量飛行機が畑に不時着 操縦していた70代男性と妻にケガなし 北見市 しかし、作成したコードでは 0,「エンジンの調子が悪かった」超軽量飛行機が畑に不時着 操縦していた70代男性と妻にケガなし 北見市 と最後のニュース名しか保存されておりません。 アドバイスを頂けましたら幸いです。
発生している問題・エラーメッセージ
連続するURLの出力はわかったのですが、 そこからニュース名を取得してしまうと、最後のURL分しかCSVに保存されておりません。 なんとなく、最初に連続してURLを表示するのではなく1個のURLを取得し→変数へを 繰り返すのだと思いますが、問題は取得したいURLが多くなればなるほどコードが長くなってしまいます。 できれば10ページや50ページなど指定してスクレイピングをしたいと考えております。
該当のソースコード
from bs4 import BeautifulSoup from urllib import request import csv for i in range(3): url = f'https://news.yahoo.co.jp/pickup/' + f'{6375460 + i}'.zfill(7) print(url) response = request.urlopen(url) soup = BeautifulSoup(response) response.close() # ニュース名 name = soup.find('p', class_='sc-hENMEE lnXRKU') print(name.text) csvlist = [["","ニュースリスト"]] num = 0 for news_txt in name: news_txt = name.text csvlist.append([num, news_txt]) num += 1 # CSVファイルを開く。ファイルがなければ新規作成する。 f = open("output.csv", "w") writecsv = csv.writer(f, lineterminator='\n') # 出力 writecsv.writerows(csvlist) # CSVファイルを閉じる。 f.close()
試したこと
URLをひとつづつ入力して、nameに代入しましても、恐らく上書きされてしまっているらしく最後の取得したURL分のニュース名しか保存されておりません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/04 07:56
2020/11/04 16:19
2020/11/05 02:10