Issue
I am using beautifulsoup to extract html data. I need to extract the html tags along with the data if data is given as search item provided the tag can be anything.
As a sample considering the following html code
<h1>Hello</h1>
<h1>Python Program</h1>
<span class = true>Geeks</span>
<span class = false>Geeks New</span>
<li class = 1 >Python Program</li>
<li class = 2 >Python Code</li>
<li class = 3 >Hello</li>
<table>
<tr>Website</tr>
</table>
Using the following code if tag is known, then the entire tag with data is available
pattern = 'Hello'
text1 = soup.find_all('li', text = pattern)
print(text1)
This will give the
[<li class = 3 >Hello</li>]
But if I give 'Hello' as search item I need to get all the tags which contain 'Hello' like
[<h1>Hello</h1>, <li class = 3 >Hello</li>]
Solution
You could use a css selector
that checks if an element contains a string:
soup.select(':-soup-contains("Hello")')
Example
from bs4 import BeautifulSoup
html ='''
<h1>Hello</h1>
<h1>Python Program</h1>
<span class = true>Geeks</span>
<span class = false>Geeks New</span>
<li class = 1 >Python Program</li>
<li class = 2 >Python Code</li>
<li class = 3 >Hello</li>
<table>
<tr>Website</tr>
</table>
'''
pattern = 'Hello'
soup = BeautifulSoup(html, 'html.parser')
soup.select(f':-soup-contains({pattern})')
Output
[<h1>Hello</h1>, <li class="3">Hello</li>]
Answered By - HedgeHog
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.