【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'}]

おすすめ

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください