我想从页面上抓取单独的内容描述,我可以使用在属性中指定的 class 或 id 来实现。但是..如果在html 标签中未指定 class 或 id 属性,我不知道如何获取元素。 / p>
喜欢此屏幕截图:
<div class="cat_box_desc">
<h3>Status:</h3>
on-going <br>
<h3>Genres:</h3>
<br>
<h3>Description:</h3>
<div align="justify">
<p> Information</p>
<p>Type: TV</p>
<p>Episodes: Unknown</p>
<p>Status: Currently Airing</p>
<p>Aired: Oct 7, 2013 to ?</p>
<p>Producers: Sunrise, TV Tokyo, Sotsu Agency</p>
<p>Genres: Mecha</p>
<p>Duration: 25 min. per episode</p>
<p>Synopsis:</p>
<p>Gundam Build Fighter adalah sebuah pertarungan simulasi Gundam. Unit Gundam dirangkai dari model plastiknya. Tokoh utamanya adalah seorang anak laki-laki yang bernama Iori Sei. Sei memiliki kemampuan merangkai Gundam yang hebat, namun dia tak
memiliki kemampuan untuk mengendalikan gundam yang ia rangkai saat melakukan Gunpla Battle. Namun satu hari dia bertemu dengan seorang pencuri roti misterius, yang memberinya sebuah batu permata.</p>
</div><br>
<div style="padding-left: 560px; padding-bottom:20px;" class="spacebook">
<div class="fb-like" data-href="http://animeindo.video/category/gundam-build-fighter/" data-width="450" data-layout="box_count" data-show-faces="false" data-send="false"></div>
</div>
</div>
我可以在class="cat_box_desc"
内抓取数据,但是我会在其中抓取所有数据,我不想要,我想分离数据。
我不知道要像上面的屏幕截图那样分离数据,其中包括状态,类型,描述,信息和 H1 和 P 标记中的其他标记,因为上面没有指定 class 或 id 。
那么在Beautifulsoup4 ..中该怎么做??
答案 0 :(得分:2)
您已经选择了BeautifulSoup,因为它是非常灵活的库,具有许多元素定位方法。
对于:
分隔的字段,我将其解析为字典以便于访问:
import re
from bs4 import BeautifulSoup
data = """
<div class="cat_box_desc">
<h3>Status:</h3>
on-going <br>
<h3>Genres:</h3>
<br>
<h3>Description:</h3>
<div align="justify">
<p> Information</p>
<p>Type: TV</p>
<p>Episodes: Unknown</p>
<p>Status: Currently Airing</p>
<p>Aired: Oct 7, 2013 to ?</p>
<p>Producers: Sunrise, TV Tokyo, Sotsu Agency</p>
<p>Genres: Mecha</p>
<p>Duration: 25 min. per episode</p>
<p>Synopsis:</p>
<p>Gundam Build Fighter adalah sebuah pertarungan simulasi Gundam. Unit Gundam dirangkai dari model plastiknya. Tokoh utamanya adalah seorang anak laki-laki yang bernama Iori Sei. Sei memiliki kemampuan merangkai Gundam yang hebat, namun dia tak
memiliki kemampuan untuk mengendalikan gundam yang ia rangkai saat melakukan Gunpla Battle. Namun satu hari dia bertemu dengan seorang pencuri roti misterius, yang memberinya sebuah batu permata.</p>
</div><br>
<div style="padding-left: 560px; padding-bottom:20px;" class="spacebook">
<div class="fb-like" data-href="http://animeindo.video/category/gundam-build-fighter/" data-width="450" data-layout="box_count" data-show-faces="false" data-send="false"></div>
</div>
</div>"""
soup = BeautifulSoup(data, "html.parser")
# first locate the container with the desired fields
description = soup.find("h3", text="Description:").find_next_sibling()
# get all the ":"-separated fields into a dictionary
pattern = re.compile(r"\w+:\s.*?")
data = dict(field.split(":") for field in description.find_all(text=pattern))
print(data)
打印:
{'Type': ' TV', 'Episodes': ' Unknown', 'Status': ' Currently Airing', 'Aired': ' Oct 7, 2013 to ?', 'Producers': ' Sunrise, TV Tokyo, Sotsu Agency', 'Genres': ' Mecha', 'Duration': ' 25 min. per episode'}
现在,它的值位于单独的Synopsis
元素中,因此无法捕获p
,但是您可以通过以下方式获取它:
data["Synopsis"] = description.find("p", text="Synopsis:").find_next_sibling("p").get_text()
完成预设的输出:
{'Aired': ' Oct 7, 2013 to ?',
'Duration': ' 25 min. per episode',
'Episodes': ' Unknown',
'Genres': ' Mecha',
'Producers': ' Sunrise, TV Tokyo, Sotsu Agency',
'Status': ' Currently Airing',
'Synopsis': 'Gundam Build Fighter adalah sebuah pertarungan simulasi Gundam. '
'Unit Gundam dirangkai dari model plastiknya. Tokoh utamanya '
'adalah seorang anak laki-laki yang bernama Iori Sei. Sei '
'memiliki kemampuan merangkai Gundam yang hebat, namun dia tak\n'
' memiliki kemampuan untuk mengendalikan gundam yang '
'ia rangkai saat melakukan Gunpla Battle. Namun satu hari dia '
'bertemu dengan seorang pencuri roti misterius, yang memberinya '
'sebuah batu permata.',
'Type': ' TV'}
我们在这里使用了一些技巧,下面是指向库文档相应部分的文档链接。确保对其进行查找以更好地使用这些功能: