获取particu的内容

2024-03-28 12:59:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想定位文本为“xyz”的“td”,以便在行中查找其他属性。我只有'xyz'和我想得到其他元素在那一行。你知道吗

.
.
.

<tr>
    <td>
        <a>xyz</a>
    </td>
    <td>address</td>
    <td>phone number</td>
</tr>

.
.
.

我可以通过使用

required = soup.find('a', text = 'xyz')
print(required[0].text)

但我无法定位'td',以便使用find_next_siblings()获取其他列。你知道吗

预期产量:

xyz
address
phone number

Tags: text定位文本元素number属性addressrequired
3条回答

将代码替换为:

from bs4 import BeautifulSoup

html = '''<tr>
    <td>
        <a>xyz</a>
    </td>
    <td>address</td>
    <td>phone number</td>
</tr>'''

soup = BeautifulSoup(html, 'lxml')
required = soup.find('a', text = 'xyz')
print(required.text)
td = required.parent
siblingsArray = td.find_next_siblings()

for siblings in siblingsArray:
    print(siblings.text)

订单号:

xyz
address
phone number

其中parent是Get immediate parent标记,find_next_siblings返回下一个同级标记的列表。你知道吗

在bs4.7.1中,组合:has:contains的伪类来检索行和tds。你知道吗

如果文本中有右a标记,则该位以该标记为目标

a:contains("xyz")

然后检索具有此a标记的父行(tr

tr:has(a:contains("xyz"))

最后使用descendant combinatortdtype selector获得该行中的所有td。使用列表理解返回列表。你知道吗

from bs4 import BeautifulSoup as bs

html = '''
<tr>
    <td>
        <a>xyz</a>
    </td>
    <td>address</td>
    <td>phone number</td>
</tr>
'''

soup = bs(html, 'lxml')
items = [item.text.strip() for item in soup.select('tr:has(a:contains("xyz")) td')]
print(items)

如果您有modern BeautifulSoup,可以使用CSS选择器:contains。然后用find_parent()方法向后遍历。你知道吗

from bs4 import BeautifulSoup

s = '''
<tr>
    <td>Other1</td>
    <td>Other1</td>
    <td>Other1</td>
</tr>
<tr>
    <td>
        <a>xyz</a>
    </td>
    <td>address</td>
    <td>phone number</td>
</tr>'''

soup = BeautifulSoup(s, 'lxml')

for td in soup.select_one('a:contains(xyz)').find_parent('tr').select('td'):
    print(td.text.strip())

印刷品:

xyz
address
phone number

相关问题 更多 >