Как получить <th>внутри <tr>с BeautifulSoup - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь получить заголовки из таблицы, которые являются частью тега <thead>. Я хочу получить доступ ко второму тегу <tr>, где мы можем найти все <th> интересующие.

<table id="tablaDatos" class="general">
<thead>

<tr><td rowspan="2" class="th r0"></td><th id="c_A0" colspan="52" class="r0">Índice</th></tr>

<tr>

<th id="c_B0" headers="c_A0" class="r1 cols">2019T4</th>
<th id="c_B1" headers="c_A0" class="r1 cols">2019T3</th>
<th id="c_B2" headers="c_A0" class="r1 cols">2019T2</th>
<th id="c_B3" headers="c_A0" class="r1 cols">2019T1</th
><th id="c_B4" headers="c_A0" class="r1 cols">2018T4</th>
<th id="c_B5" headers="c_A0" class="r1 cols">2018T3</th>
<th id="c_B6" headers="c_A0" class="r1 cols">2018T2</th>
<th id="c_B7" headers="c_A0" class="r1 cols">2018T1</th>
<th id="c_B8" headers="c_A0" class="r1 cols">2017T4</th>
<th id="c_B9" headers="c_A0" class="r1 cols">2017T3</th>
<th id="c_B10" headers="c_A0" class="r1 cols">2017T2</th>
<th id="c_B11" headers="c_A0" class="r1 cols">2017T1</th>
<th id="c_B12" headers="c_A0" class="r1 cols">2016T4</th>
<th id="c_B13" headers="c_A0" class="r1 cols">2016T3</th>
<th id="c_B14" headers="c_A0" class="r1 cols">2016T2</th>
<th id="c_B15" headers="c_A0" class="r1 cols">2016T1</th>
<th id="c_B16" headers="c_A0" class="r1 cols">2015T4</th>
<th id="c_B17" headers="c_A0" class="r1 cols">2015T3</th>
<th id="c_B18" headers="c_A0" class="r1 cols">2015T2</th>
<th id="c_B19" headers="c_A0" class="r1 cols">2015T1</th>
<th id="c_B20" headers="c_A0" class="r1 cols">2014T4</th>
<th id="c_B21" headers="c_A0" class="r1 cols">2014T3</th>
<th id="c_B22" headers="c_A0" class="r1 cols">2014T2</th>
<th id="c_B23" headers="c_A0" class="r1 cols">2014T1</th>
<th id="c_B24" headers="c_A0" class="r1 cols">2013T4</th>
<th id="c_B25" headers="c_A0" class="r1 cols">2013T3</th>
<th id="c_B26" headers="c_A0" class="r1 cols">2013T2</th>
<th id="c_B27" headers="c_A0" class="r1 cols">2013T1</th>
<th id="c_B28" headers="c_A0" class="r1 cols">2012T4</th>
<th id="c_B29" headers="c_A0" class="r1 cols">2012T3</th>
<th id="c_B30" headers="c_A0" class="r1 cols">2012T2</th>
<th id="c_B31" headers="c_A0" class="r1 cols">2012T1</th>
<th id="c_B32" headers="c_A0" class="r1 cols">2011T4</th>
<th id="c_B33" headers="c_A0" class="r1 cols">2011T3</th>
<th id="c_B34" headers="c_A0" class="r1 cols">2011T2</th>
<th id="c_B35" headers="c_A0" class="r1 cols">2011T1</th>
<th id="c_B36" headers="c_A0" class="r1 cols">2010T4</th>
<th id="c_B37" headers="c_A0" class="r1 cols">2010T3</th>
<th id="c_B38" headers="c_A0" class="r1 cols">2010T2</th>
<th id="c_B39" headers="c_A0" class="r1 cols">2010T1</th>
<th id="c_B40" headers="c_A0" class="r1 cols">2009T4</th>
<th id="c_B41" headers="c_A0" class="r1 cols">2009T3</th>
<th id="c_B42" headers="c_A0" class="r1 cols">2009T2</th>
<th id="c_B43" headers="c_A0" class="r1 cols">2009T1</th>
<th id="c_B44" headers="c_A0" class="r1 cols">2008T4</th>
<th id="c_B45" headers="c_A0" class="r1 cols">2008T3</th>
<th id="c_B46" headers="c_A0" class="r1 cols">2008T2</th>
<th id="c_B47" headers="c_A0" class="r1 cols">2008T1</th>
<th id="c_B48" headers="c_A0" class="r1 cols">2007T4</th>
<th id="c_B49" headers="c_A0" class="r1 cols">2007T3</th>
<th id="c_B50" headers="c_A0" class="r1 cols">2007T2</th>
<th id="c_B51" headers="c_A0" class="r1 cols">2007T1</th>
</tr>
</thead>

Проблема в том, что мой код дает мне только первый заголовок (2019T4), но не все остальные <th> внутри второго <tr>

Здесь мой код:

from bs4 import BeautifulSoup
import requests
import pandas as pd


url = "https://www.ine.es/jaxiT3/Datos.htm?t=25171#!tabs-tabla"
req = requests.get(url)
html = BeautifulSoup(req.text, "html.parser")
table = html.find("table")
header = []
for cols in table.findAll('th',class_="r1 cols"):  
    header.append(cols)
print(header)

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете получить только заголовки, используя другой URL-адрес, в котором вы фактически выбираете периоды для возврата данных для

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.ine.es/jaxiT3/Tabla.htm?t=25171')
soup = bs(r.content, 'lxml')
print([i.text for i in soup.select('#periodo option')])

. По этому URL-адресу необходимо сделать выборку, чтобы затем вернуть указанные c данные интерес. Нам потребуется точный выбор, если вы намереваетесь повторить всю таблицу (которая не указана в качестве требования в вашем вопросе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...