前提・実現したいこと
空白行を削除し、指定するidの子要素であるpタグをすべて取得したいです。
発生している問題・エラーメッセージ
スクレイピングしたいサイトのHTMLが下記のようになっています。
html
1 ...省略... 2 <div id="hogehoge"> 3 <p>hoge1</p> 4 <p>hoge2</p> 5 <p>hoge3</p> 6 <!--comment--> 7 <!--comment--> 8 <p>hoge4</p> 9 <p>hoge5</p> 10 </div>
id="hogehoge"のpタグをすべて取得したいのですが、コメントがあるためhoge1~hoge3までのpタグしか取れませんでした。
そこで、コメントを削除するプログラムを追加したところ、コメントはなくなったのですが下記のように空白行ができてしまいました。
空白行があるため、取得できるタグはhoge1~hoge3までと上記と変わりませんでした。
html
1 ...省略... 2 <div id="hogehoge"> 3 <p>hoge1</p> 4 <p>hoge2</p> 5 <p>hoge3</p> 6 7 8 <p>hoge4</p> 9 <p>hoge5</p> 10 </div>
error
1AttributeError: 'str' object has no attribute 'select'
該当のソースコード
Python3
1import requests 2from bs4 import BeautifulSoup, Comment 3 4 5response = requests.get('https://hogehoge.com/index.html') 6response.encoding = response.apparent_encoding # 日本語の文字化けを解消 7soup = BeautifulSoup(response.content, 'html.parser') # BeautifulSoupの初期化 8 9print(soup.title.text) #タイトルを表示 10 11#コメントの除去 12comments = soup.findAll(text=lambda text:isinstance(text, Comment)) 13[comment.extract() for comment in comments] 14 15# scriptタグとstyleタグを取り除く 16for script in soup(["script", "style"]): 17 script.decompose() 18 19# 空白行を取り除いて、値を取得する 20test = soup.prettify().select('hogehoge') #ここがダメっぽい。
当方、プログラム初心者のため優しくご教示いただきたく存じます。
回答2件
あなたの回答
tips
プレビュー