使用美丽的汤刮数据

时间:2017-12-08 17:14:17

标签: python python-2.7 beautifulsoup

使用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>代码的数据

2 个答案:

答案 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'