使用bs4 beautifulSoup查找特定元素



我通常使用硒,但我想我会试试bs4!

我试图在网站上找到这个特定的文本,在下面的例子中,我想要最后一个

-189305014

<div class="info_container">
                  <div id="profile_photo">
                    <img src="https://pbs.twimg.com/profile_images/882103883610427393/vLTiH3uR_reasonably_small.jpg" />
                  </div>
                  <table class="profile_info">
                    <tr>
                        <td class="left_column">
                            <p>Twitter User ID:</p>
                        </td>
                        <td>
                            <p>189305014</p>
                        </td>
                    </tr>

这是我正在使用的脚本-

TwitterID = soup.find('td',attrs={'class':'left_column'}).text

这将返回

Twitter User ID:

您可以从包含"Twitter User ID:":的标签搜索下一个<p>标签

from bs4 import BeautifulSoup

txt = '''<div class="info_container">
                  <div id="profile_photo">
                    <img src="https://pbs.twimg.com/profile_images/882103883610427393/vLTiH3uR_reasonably_small.jpg" />
                  </div>
                  <table class="profile_info">
                    <tr>
                        <td class="left_column">
                            <p>Twitter User ID:</p>
                        </td>
                        <td>
                            <p>189305014</p>
                        </td>
                    </tr>
'''
soup = BeautifulSoup(txt, 'html.parser')
print(soup.find('p', text='Twitter User ID:').find_next('p'))

打印:

<p>189305014</p>

class="profile_info":内的最后一个<p>元素

print(soup.select('.profile_info p')[-1])

class="left_column":的第一个同级

print(soup.select_one('.left_column + *').text)

使用以下代码获得所需的输出:

TwitterID = soup.find('td',attrs={'class': None}).text

要只从第二个<p>标签中获取数字,您可以过滤字符串是否为数字((:

from bs4 import BeautifulSoup
html = """<div class="info_container">
                  <div id="profile_photo">
                    <img src="https://pbs.twimg.com/profile_images/882103883610427393/vLTiH3uR_reasonably_small.jpg" />
                  </div>
                  <table class="profile_info">
                    <tr>
                        <td class="left_column">
                            <p>Twitter User ID:</p>
                        </td>
                        <td>
                            <p>189305014</p>
                        </td>
                    </tr>"""
soup = BeautifulSoup(html, 'html.parser')
result = ''.join(
    [t for t in soup.find('div', class_='info_container').text if t.isdigit()]
)
print(result)

输出:

189305014

最新更新