Python Beautiful Soup查找字符串并提取以下字符串

2024-05-14 12:58:58 发布

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

我在beautiful soup的帮助下编写一个网络爬虫程序。我有以下html代码:

<tr class="odd-row">
        <td>xyz</td>
        <td class="numeric">5,00%</td>      
    </tr>
<tr class="even-row">
        <td>abc</td>
        <td class="numeric">50,00%</td                      
    </tr>
<tr class="odd-row">
        <td>ghf</td>
        <td class="numeric">2,50%</td>

我的目标是把数字写在^{cl 1}之后$

目前我正在做以下工作:

for c in soup.find_all("a", string=re.compile('abc')):
    abc=c.string

当然,它返回的是字符串“abc”,而不是标签中的数字。 所以基本上我的问题是如何在^{cl 2}之后处理字符串$

谢谢你的帮助!!!


Tags: 字符串网络stringcl数字tr爬虫class
3条回答

一旦你找到了正确的td,我认为这是你想要的,代替a的东西,然后让下一个兄弟姐妹来上你想要的课:

h = """<tr class="odd-row">
        <td>xyz</td>
        <td class="numeric">5,00%</td>
    </tr>
<tr class="even-row">
        <td>abc</td>
        <td class="numeric">50,00%</td
    </tr>
<tr class="odd-row">
        <td>ghf</td>
        <td class="numeric">2,50%</td>"""


from bs4 import BeautifulSoup

soup = BeautifulSoup(h)

for td in soup.find_all("td",text="abc"):
    print(td.find_next_sibling("td",class_="numeric"))

如果数字td总是next,则可以调用find_next_sibling():

for td in soup.find_all("td",text="abc"):
    print(td.find_next_sibling())

对于你的意见,双方都会给你:

td class="numeric">50,00%</td>

所以当我理解你的问题时,你想在元组上迭代 (“xyz”、“5,00%”)、(“abc”、“50,00%”)、(“ghf”、“2,50%”)。是这样吗?

但我不明白代码是如何产生任何结果的,因为您正在搜索<a>标记。

相反,您应该遍历<tr>标记,然后获取<td>标记中的字符串。注意用于访问第二个<td>的双next_sibling,因为第一个next_sibling将引用两个标记之间的空白。

html = """
<tr class="odd-row">
    <td>xyz</td>
    <td class="numeric">5,00%</td>      
</tr>
<tr class="even-row">
    <td>abc</td>
    <td class="numeric">50,00%</td                      
</tr>
<tr class="odd-row">
    <td>ghf</td>
    <td class="numeric">2,50%</td>
</tr>
"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')

for tr in soup.find_all("tr"):
    print((tr.td.string, tr.td.next_sibling.next_sibling.string))

如果我正确理解您的问题,并且假设您的html代码始终遵循示例结构,则可以执行以下操作:

result = {}
table_rows = soup.find_all("tr")
for row in table_rows:
    table_columns = row.find_all("td")
    result[table_columns[0].text] = tds[1].text
print result  #### {u'xyz': u'2,50%', u'abc': u'2,50%', u'ghf': u'2,50%'}

你最终得到了一个字典,关键字名是'xyz'、'abc'…等等,它们的值是class="numeric"中的字符串

相关问题 更多 >

    热门问题