Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
494 views
in Technique[技术] by (71.8m points)

python - How to find tag with particular text with Beautiful Soup?

I have the following html (line breaks marked with ):

...
<tr>
  <td class="pos">

      "Some text:"

      <br>

      <strong>some value</strong>

  </td>
</tr>
<tr>
  <td class="pos">

      "Fixed text:"

      <br>

      <strong>text I am looking for</strong>

  </td>
</tr>
<tr>
  <td class="pos">

      "Some other text:"

      <br>

      <strong>some other value</strong>

  </td>
</tr>
...

How to find text I am looking for? The code below returns first found value, so I need to filter by Fixed text somehow.

result = soup.find('td', {'class' :'pos'}).find('strong').text

Upd. If I use the following code:

title = soup.find('td', text = re.compile(ur'Fixed text:(.*)', re.DOTALL), attrs = {'class': 'pos'})
self.response.out.write(str(title.string).decode('utf8'))

then it returns just Fixed text:.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can pass a regular expression to the text parameter of findAll, like so:

import BeautifulSoup
import re

columns = soup.findAll('td', text = re.compile('your regex here'), attrs = {'class' : 'pos'})

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...