使用beautifulsoup仅解析来自内部`a`元素的文本值

时间:2018-07-03 19:32:15

标签: python parsing beautifulsoup

我想用漂亮的汤只解析CSS选择器的文本。

css选择器是:td a。如果td的输出没有与之关联的a,请不要解析它。

我有大概如下的代码:

req  = requests.get(url)
soup = BeautifulSoup(req.content, 'html.parser')
soup.find("id", {"id": "monatevent"})

html如下:

<td id="monat">5</td>
<td id="monat">6</td>
<td id="monatevent"><a href="file?mdu=82383783">7</a></td>

我只想从其内部monatevent元素中提取7,特别是a

我该怎么做?

谢谢。

2 个答案:

答案 0 :(得分:1)

如果要确保它包含在<a>......</a>标记中,则:

soup.find('td', {'id': 'monatevent'}).find('a').text

返回:

7

请记住,如果soup.find('td', {'id': 'montaevent'})返回None,这将返回错误,在这种情况下,您可以使用try-except块来处理此错误。

如果要查找所有符合条件的对象并创建一个列表,请执行以下操作:

output = [i.find('a').text for i in soup.find_all('td', {'id': 'monatevent'})]

同样,这假定所有标签都包含一个内部<a>标签。如果没有,请执行以下操作:

output = []
tags = soup.find_all('td', {'id': 'monatevent'})
for i in tags:
    try:
        output.append(i.find('a').text)
    except:
        continue

答案 1 :(得分:0)

您必须根据标签名称find

soup.find("td", {"id": "monatevent"})
# <td id="monatevent"><a href="file?mdu=82383783">7</a></td>

soup.find("td", {"id": "monatevent"}).text
# '7'