1. ホーム
  2. python

[解決済み] タグ内のテキストを表示する BeautifulSoup

2022-02-15 16:54:55

質問

例えばタグの中のテキストだけを表示させたいのですが、どうすればいいですか?

<span class="listing-row__price ">$71,996</span>

のみを表示させたい。

71,996ドルです。

私のコードは

import requests
from bs4 import BeautifulSoup
from csv import writer

response = requests.get('https://www.cars.com/for-sale/searchresults.action/?mdId=21811&mkId=20024&page=1&perPage=100&rd=99999&searchSource=PAGINATION&showMore=false&sort=relevance&stkTypId=28880&zc=11209')

soup = BeautifulSoup(response.text, 'html.parser')

cars = soup.find_all('span', attrs={'class': 'listing-row__price'})
print(cars)

タグからテキストを抽出するにはどうすればよいですか?

どのように解決するのですか?

タグ内のテキストを取得するためには、いくつかのアプローチがあります。

a) を使用します。 .text 属性で指定します。

cars = soup.find_all('span', attrs={'class': 'listing-row__price'})
for tag in cars:
    print(tag.text.strip())

出力

$71,996
$75,831
$71,412
$75,476
....

b) 使用方法 get_text()

for tag in cars:
    print(tag.get_text().strip())

c) もし タグの中にある文字列のみ 以下のオプションも使用できます。

  • .string
  • .contents[0]
  • next(tag.children)
  • next(tag.strings)
  • next(tag.stripped_strings)

ie.

for tag in cars:
    print(tag.string.strip()) #or uncomment any of the below lines
    #print(tag.contents[0].strip())
    #print(next(tag.children).strip())
    #print(next(tag.strings).strip())
    #print(next(tag.stripped_strings))

出力します。

$71,996
$75,831
$71,412
$75,476
$77,001
...

.text.string は同じではありません。タグの中に他の要素がある場合。 .string が返されます。 None .textはタグの中のテキストを返します。

from bs4 import BeautifulSoup
html="""
<p>hello <b>there</b></p>
"""
soup = BeautifulSoup(html, 'html.parser')
p = soup.find('p')
print(p.string)
print(p.text)

出力内容

None
hello there