我需要一种方法来检索特定的“ td”标签及其文本内容,该标签位于同一“ tr”行的特定“ th”标签下。结构是这样的:
<tr>...Not interested in this row...</tr>
<tr>...Not interested in this row...</tr>
<tr>
<th>Titletext</th>
<td class="rightalign right">64663438434</td>
</tr>
<tr>...Not interested in this row...</tr>
<tr>...Not interested in this row...</tr>
我想通过'th'标签进行搜索,并检索其下'td'标签内的数字。有什么想法吗?
答案 0 :(得分:0)
这是您要找的吗?
num = soup.find('td', class_='rightalign right')
num.text
输出:
'64663438434'
答案 1 :(得分:0)
您可能可以使用re模块。
import re
cells = re.findall(u"<th>Titletext</th>[^>]*>([^<]*)</td>", page)
print(cells)
答案 2 :(得分:0)
import bs4
html = '<tr>...Not interested in this row...</tr> \n <tr>...Not interested in this row...</tr>\n <tr> \n <th>Titletext</th> \n <td class="rightalign right">64663438434</td> \n </tr> \n <tr>...Not interested in this row...</tr> \n <tr>...Not interested in this row...</tr>'
bs = bs4.BeautifulSoup(html)
for tr in bs.find_all('tr'):
for th in tr.find_all('th'):
td = th.find_next_sibling()
if 'class=\"rightalign right' in str(td):
print(td.text)
64663438434
就个人而言,我会坚持使用漂亮的汤,而不是尽可能使用自己的正则表达式。 html的结构可能不一致,漂亮的汤掩盖了很多复杂性和繁重的负担
答案 3 :(得分:0)
BeautifulSoup足以为您搜索所需的元素:
value = soup.find('th', text='Titletext').findNextSibling('td').text
您将获得一个字符串,因此请考虑将其转换为int ...
如果该行包含多个TD标签,并且您不希望第一个TD标签,但是想要第一个具有特定类的TD标签,则可以将其添加到请求中:
value = soup.find('th', text='Titletext').findNextSibling('td',
{'class': "rightalign right"}).text
(感谢ArranDuff注意到)