スクレイピング時に特定のタグが複数ある場合のlistへの代入方法を教えてください。
変数に入っているテーブルの情報をcsvに書き込みしたい
上記の例を参考にPタグだけをCSVに表示する事が出来ました。
応用で、複数のURLでニュース名を入れて、Pタグ(複数あるタグ)も同じようにCSVへ表示しようと思い下記のコードを思いつきました。
今回は、例でPタグの7番目だけを取得して、CSVに表示できれば、その応用で8番目9番目と増やせると思いましたが、find_all 使用時のlistへの代入方法が理解しておらず、上手くいきません。
Python
1from bs4 import BeautifulSoup 2from urllib import request 3import csv 4import pandas as pd 5 6he6list = [] 7namelist = [] 8 9for i in range(3): 10 url = f'https://news.yahoo.co.jp/pickup/' + f'{6375460 + i}'.zfill(7) 11 print(url) 12 13 response = request.urlopen(url) 14 soup = BeautifulSoup(response) 15 16 # ニュース名 17 name = soup.find('p', class_='sc-hENMEE lnXRKU') 18 print(name) 19 namelist.append(name.text) 20 21 # p要素を抜き出す 今回は例で7番目のみ 22 he = [tag.string for tag in soup.find_all("p")] 23 print(he[6]) 24 he6 = he[6] 25 he6list.append(he6.text) 26 27response.close() 28 29# CVS出力するための準備 30df_pp = pd.DataFrame.from_dict({'ニュース名':namelist, 'he6':he6list}, orient='index').T 31 32print(df_pp)
エラーコード
AttributeError Traceback (most recent call last) <ipython-input-37-ff705a6eb246> in <module> 23 print(he[6]) 24 he6 = he[6] ---> 25 he6list.append(he6.text) 26 27 response.close() ~\anaconda3\lib\site-packages\bs4\element.py in __getattr__(self, attr) 914 return self 915 else: --> 916 raise AttributeError( 917 "'%s' object has no attribute '%s'" % ( 918 self.__class__.__name__, attr)) AttributeError: 'NavigableString' object has no attribute 'text' ニュース名 he6 0 アップル、11月11日に特別イベント「One more thing.」--Appleシリコン... 1 None ア 2 None ッ 3 None プ 4 None ル .. ... .. 74 None れ 75 None て 76 None い 77 None る 78 None 。 [79 rows x 2 columns]
CSVで表示したいこと
ニュース名 he6 0 アップル~略~ アップルは日本時間~略~ 1 DeNA~略~ Pの7番目 2 「エンジン~略~ Pの7番目
ニュース名まででしたら、以前質問に答えていただき進むことが出来ましたが、
findとfind_allの違いにより壁にぶつかっております。
どのようにコードを修正すればいいでしょうか?
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/09 05:20