Как найти значение в таблице без идентификаторов? (Питон, Селен) - PullRequest
0 голосов
/ 27 марта 2019

У меня есть веб-страница с таблицей из множества строк.Пользователь даст мне номер (15308), который можно найти в верхней строке с первым тегом <td>, и это единственная информация, которая у меня будет.Я хочу использовать это число для поиска данных между тегом <th></th> (точнее, 0), но только для строки таблицы.Например, я прикрепил две строки таблицы и хочу получить данные <th> с использованием номера 15308, а не данные <th> из строки таблицы с номером 15309 в первом <td>.Любая помощь приветствуется!
Желаемый результат: 0

<tr>
<td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR+2019&amp;SLN=15308">15308</a></td>
<td nowrap="">INFO   101  </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING   </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER">  0</th><td align="CENTER"> 229</td>
<td></td>
</tr>
<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR+2019&amp;SLN=15309">15309</a></td>
<td nowrap="">INFO   101  </td>
<td>AA</td>
<td align="CENTER">LB</td>
<td>SOCIAL NETWORKING   </td>
<td align="CENTER">  25</td>
<td align="CENTER">  25</td>
<td align="CENTER">  26</td>
<th align="CENTER" style="">  2</th><td align="CENTER">  21</td>
<td></td>
</tr>

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Используйте следующий код:

userValue='15308'
all_td_th_of_row = driver.find_elements_by_xpath("//td[normalize-space()='" + userValue + "']//following-sibling::td|th")
i = 0
while i<len(all_td_th_of_row) : 
    print(all_td_th_of_row[i].text)
    i=i+1
0 голосов
/ 27 марта 2019

Что-то, что я всегда находил прекрасным, используя beauitfulsoup:

Используя xpath="1" в качестве атрибута:

line = '''<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR+2019&amp;SLN=15308" style="">15308</a></td>
<td nowrap="">INFO   101  </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING   </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER" style="" xpath="1">  0</th><td align="CENTER"> 229</td>
<td></td>
</tr>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(line, 'html.parser')
xpathTh = soup.find('th',  attrs={'xpath': '1'})
print(xpathTh.text.strip())

ВЫХОД :

0

РЕДАКТИРОВАТЬ :

Чтобы получить все значения из атрибута:

line = '''<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR+2019&amp;SLN=15308" style="">15308</a></td>
<td nowrap="">INFO   101  </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING   </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER" style="" xpath="1">  0</th><td align="CENTER"> 229</td>
<th align="CENTER" style="" xpath="1">  1</th><td align="CENTER"> 229</td>
<th align="CENTER" style="" xpath="1">  2</th><td align="CENTER"> 229</td>
<td></td>
</tr>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(line, 'html.parser')
xpathTh = soup.find_all('th',  attrs={'xpath': '1'})

for elem in xpathTh:
    print(elem.text.strip())

ВЫХОД :

0
1
2

РЕДАКТИРОВАТЬ 2 :

Учитывая, что вы хотите только xpath value, если anchor tag внутри td (внутри tr) имеет значение 15308:

line = '''<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR+2019&amp;SLN=15308" style="">15308</a></td>
<td nowrap="">INFO   101  </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING   </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER" style="" xpath="1">  0</th><td align="CENTER"> 229</td>
<td></td>
</tr>
<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR+2019&amp;SLN=2222" style="">22222</a></td>
<td nowrap="">INFO   101  </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING   </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER" style="" xpath="1">  1</th><td align="CENTER"> 229</td>
<td></td>
</tr>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(line, 'html.parser')

trElems = soup.find_all('tr')
toFind = '15308'

for tr in trElems:
    val = tr.select('td a')[0].text
    if toFind == val:
        xpathTh = tr.find_all('th', attrs={'xpath': '1'})
        for elem in xpathTh:
            print(elem.text.strip())

ВЫХОД :

0

РЕДАКТИРОВАТЬ3 :

Продолжая комментарии:

line = '''<tr>
<td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR+2019&amp;SLN=15308">15308</a></td>
<td nowrap="">INFO   101  </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING   </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER">  0</th><td align="CENTER"> 229</td>
<td></td>
</tr>
<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR+2019&amp;SLN=15309">15309</a></td>
<td nowrap="">INFO   101  </td>
<td>AA</td>
<td align="CENTER">LB</td>
<td>SOCIAL NETWORKING   </td>
<td align="CENTER">  25</td>
<td align="CENTER">  25</td>
<td align="CENTER">  26</td>
<th align="CENTER" style="">  2</th><td align="CENTER">  21</td>
<td></td>
</tr>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(line, 'html.parser')

trElems = soup.find_all('tr')
toFind = '15308'

for tr in trElems:
    val = tr.select('td a')[0].text
    if toFind == val:
        xpathTh = tr.find_all('td')[7]
        print("For the value: {}, The result is {}".format(toFind, xpathTh.find_next('th').text.strip()))

ВЫХОД :

For the value: 15308, The result is 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...