【python】取得したHTMLから、特定文字列の付近にある要素を取得
■要件
・ある文字列が含まれていたら、その付近にあるリンクやテキストを取得したい
・ある文字列が含まれているブロックが複数ある場合がある
■実行概要
・BeautifulSoupでhtmlソースを解析
・find() , find_all()を使って要素を検索
■コード
import pprint
from bs4 import BeautifulSoup
#htmlソース
html = '''
<div class="item_details">
<h3>
<a href="https://○○○_1">
<span class="item_name">アイテム名_1</span>
</a>
</h3>
<p class="item_stock">在庫あり</p>
</div>
<div class="item_details">
<h3>
<a href="https://○○○_2">
<span class="item_name">アイテム名_2</span>
</a>
</h3>
<p class="item_stock">在庫あり</p>
</div>
'''
#BeautifulSoupで解析
soup = BeautifulSoup(html, 'lxml')
newList = []
#複数ある場合は、繰り返しで検索
for item in soup.find_all(class_="item_details"):
#検索文字列にヒットしたら
if '在庫あり' in str(item):
#指定class名の中にあるテキストを取得
item_name = item.find(class_="item_name").text
#指定タグの中にあるhrefを取得
item_link= item.find('h3').a['href']
#辞書型にして配列に格納
item_dict = {'item_name':item_name , 'item_link':item_link}
newList.append(item_dict)
pprint.pprint(newList)
結果
[{'item_link': 'https://○○○_1', 'item_name': 'アイテム名_1'},
{'item_link': 'https://○○○_2', 'item_name': 'アイテム名_2'}]