Как извлечь номер из тега HTML - PullRequest
0 голосов
/ 01 декабря 2018

Пожалуйста, как мне извлечь следующие элементы из HTML-кода, вставленного ниже.

  1. Только цена открытия (7.50)
  2. Только объемная цифра (11,393,304)
  3. Сегодняшний максимум (7,80)
  4. Сегодняшний минимум (7,15)
<div class="col-1">
<!-- previous close  -->
<div class="section-quote-detail group">
<span class="detail-label">Previous Close</span>
<span class="detail-value">7.50</span>
</div>
<!-- open  -->
<div class="section-quote-detail group">
<span class="detail-label">Open</span>
<span class="detail-value">7.50</span>
</div>
<!-- Volume (daily)  -->
<div class="section-quote-detail group">
<span class="detail-label">Volume</span>
<span class="detail-value">11,393,304</span>
</div>
<!-- 3Month (90 day avg volume)  -->
<div class="section-quote-detail group">
<span class="detail-label">3m Avg Volume</span>
<span class="detail-value">13,978,777</span>
</div>
<!-- Today's High  -->
<div class="section-quote-detail group">
<span class="detail-label">Today’s High</span>
<span class="detail-value">7.80</span>
</div>
<!-- Today's Low  -->
<div class="section-quote-detail group">
<span class="detail-label">Today’s Low</span>
<span class="detail-value">7.15</span>
</div>
</div>

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Что я понял из вашей проблемы, так это то, что: учитывая некоторый текст (например, «Открыть»), вы хотите найти связанный с ним номер (например: 7.50).

Мое решение состоит в том, чтобы сначала найтитег span с текстом, а затем найти его родного брата.

def getNumberGivenText(text):
    pattern = re.compile(text)
    #find the span tag with this text
    span_tag = soup.findAll("span", text=pattern)[0]
    #find it's next sibling
    num_tag=span_tag.find_next_sibling()
    #get the value
    number=num_tag.string
    return number

print(getNumberGivenText("Open")) #7.50
print(getNumberGivenText("Today’s Low")) #7.15
0 голосов
/ 02 декабря 2018

попробуй.в основном перебирает теги и захватывает их в get_list

html = '''
<div class="col-1">
<!-- previous close  -->
<div class="section-quote-detail group">
<span class="detail-label">Previous Close</span>
<span class="detail-value">7.50</span>
</div>
<!-- open  -->
<div class="section-quote-detail group">
<span class="detail-label">Open</span>
<span class="detail-value">7.50</span>
</div>
<!-- Volume (daily)  -->
<div class="section-quote-detail group">
<span class="detail-label">Volume</span>
<span class="detail-value">11,393,304</span>
</div>
<!-- 3Month (90 day avg volume)  -->
<div class="section-quote-detail group">
<span class="detail-label">3m Avg Volume</span>
<span class="detail-value">13,978,777</span>
</div>
<!-- Today's High  -->
<div class="section-quote-detail group">
<span class="detail-label">Today’s High</span>
<span class="detail-value">7.80</span>
</div>
<!-- Today's Low  -->
<div class="section-quote-detail group">
<span class="detail-label">Today’s Low</span>
<span class="detail-value">7.15</span>
</div>
</div>'''


import bs4 

soup = bs4.BeautifulSoup(html, 'html.parser')
data = soup.find_all('div', {'class':'section-quote-detail group'})

get_list = ['Open','Volume',"Today’s High","Today’s Low"]

results = pd.DataFrame()
for element in data:
    if element.select('span.detail-label')[0].text in get_list:
        label = element.select('span.detail-label')[0].text
        value = element.select('span.detail-value')[0].text
        temp_df = pd.DataFrame([[label, value]], columns = ['label', 'value'])
        results = results.append(temp_df).reset_index(drop=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...