aタグを削除したいです
aタグを削除するためにfind().decompose
を使ったのですが以下のエラーが出ました。
恥ずかしながら今までこのエラーの意味を考えず、とりあえずfind_all文にforを付け加えるような形でやり過ごしてきました。
例)for ex in base.find_all()
上記のようにforを付け加えてエラーをなんとなく考えていたのですが、
今回、エラーの理由をご教示頂きしっかりと理解しようと考えております。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "wiki_new.py", line 57, in <module> term_long() File "wiki_new.py", line 51, in term_long for ten in seven.find_all('a').decompose(): File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/bs4/element.py", line 2080, in __getattr__ raise AttributeError( AttributeError: ResultSet object has no attribute 'decompose'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
該当のソースコード
import requests import re import matplotlib.pyplot as plt import numpy as np from matplotlib.offsetbox import AnchoredText from bs4 import BeautifulSoup from requests.exceptions import Timeout url = 'https://ja.wikipedia.org/wiki/%E5%86%85%E9%96%A3%E7%B7%8F%E7%90%86%E5%A4%A7%E8%87%A3#%E5%86%85%E9%96%A3%E7%B7%8F%E7%90%86%E5%A4%A7%E8%87%A3%E3%81%AE%E4%B8%80%E8%A6%A7_2' try: r = requests.get(url,timeout=3.5) except Timeout: print('this is timeout error') pass html_soup = BeautifulSoup(r.text,'html.parser') all = html_soup.find('table',class_='sortable wikitable') def person_name(): for per in all: for two in all.find_all('tr'): for three in two.find_all('td'): un = three.get_text(strip=True) for more in three.find_all('b'): ni = more.get_text(strip=True) ori = print(ni) return ori def elsepe (): for per in all: for two in all.find_all('tr'): for three in two.find_all('td'): un = three.get_text(strip=True) for more in three.select('a'): new_type = more.get_text(strip=True) one = re.sub('[0-9年平成昭和令和明治大正]','',new_type) show = print(one) return show person_name() elsepe() def term_long(): for per in all: for six in all.find_all('tr'): for seven in six.find_all('td'): #こちらの行を修正中です。(下記のコード) for ten in seven.findall('a').decompose: time = ten.get_text(strip=True) nine = re.findall('[0-9]+',time) eigtht = print(nine) return ni term_long()
試したこと
- decomposeを使ってタグを削除しようとしました
- re.findallを使って<a>から始まる行のみを除去しようとしました。
- re.subを使って<a>から始まる行のみを置き換えて除去しようとしました。
- 正しい方法かわからないのですが、find_allに正規表現を組み合わせて削除しようとしました。
上記の4つの試みのなかで一番再現性が高い?ような気がしたので1のエラーについて質問させて頂いております。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/26 05:59