使用beautifulSoap
抓取数据时
在这个html代码中有两个<h2>
标记,但我想从第二个<h2>
标记中提取数据。那我该怎么做呢?
等等,如果有多个相同的标签,我想从任何一个标签中提取数据,我该怎么办?
代码:
<h2>Video Instructions For Making Soft Idlis</h2>
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="https://www.youtube.com/embed/p3uF3LK5734?rel=0" allowfullscreen="allowfullscreen"></iframe>
</div>
<h2>Recipe For Making Soft Idlis</h2>
我曾想过使用关键字而不是使用标记来提取数据。
例如,我可以使用<h2>
代码并使用关键字Recipe
来查找第二个<h2>
代码的数据
答案 0 :(得分:1)
如果您根据订单了解所需的h2
,则只需将其用作.findAll
方法返回的索引:
from bs4 import BeautifulSoup
soup = BeautifulSoup('''<h2>Video Instructions For Making Soft Idlis</h2>
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="https://www.youtube.com/embed/p3uF3LK5734?rel=0" allowfullscreen="allowfullscreen"></iframe>
</div>
<h2>Recipe For Making Soft Idlis</h2>''', "html.parser")
>>> soup.findAll("h2")[1]
<h2>Recipe For Making Soft Idlis</h2>
答案 1 :(得分:0)
例如,我可以使用
<h2>
代码并使用关键字Recipe
查找第二个<h2>
代码的数据
是的,你可以做到这一点。您可以使用Python re
(正则表达式)模块来匹配标记内的部分文本。
来自 documentation :
如果传入正则表达式对象,Beautiful Soup将使用其
search()
方法过滤该正则表达式。
<强>演示:强>
>>> import re
>>> from bs4 import BeautifulSoup
>>>
>>> html = '''<h2>Video Instructions For Making Soft Idlis</h2>
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="https://www.youtube.com/embed/p3uF3LK5734?rel=0" allowfullscreen="allowfullscreen"></iframe>
</div>
<h2>Recipe For Making Soft Idlis</h2>'''
>>>
>>> soup = BeautifulSoup(html, 'html.parser')
>>> tag = soup.find('h2', text=re.compile('Recipe'))
>>> tag
<h2>Recipe For Making Soft Idlis</h2>
>>> tag.text
'Recipe For Making Soft Idlis'