【发布时间】:2020-09-28 14:30:09
【问题描述】:
虽然使用 BeautifulSoup 抓取网页,有没有办法限制 find 方法系列找到的元素数量。
例如,如果我只想要前 5 个标签,我可以使用 BeautifulSoup 做到这一点吗?
【问题讨论】:
标签: web-scraping beautifulsoup
虽然使用 BeautifulSoup 抓取网页,有没有办法限制 find 方法系列找到的元素数量。
例如,如果我只想要前 5 个标签,我可以使用 BeautifulSoup 做到这一点吗?
【问题讨论】:
标签: web-scraping beautifulsoup
.find_all() 和 .select() 返回标准 python 列表,因此您可以使用例如 [:5] 仅获取前 5 个结果:
from bs4 import BeautifulSoup
txt = '''
<div>Tag 1</div>
<div>Tag 2</div>
<div>Tag 3</div>
<div>Tag 4</div>
<div>Tag 5</div>
<div>Tag 6</div>
<div>Tag 7</div>
'''
soup = BeautifulSoup(txt, 'html.parser')
for div in soup.find_all('div')[:5]:
print(div.text)
打印:
Tag 1
Tag 2
Tag 3
Tag 4
Tag 5
编辑:您可以使用 CSS 选择器选择前 5 个元素:
from bs4 import BeautifulSoup
txt = '''
<div>Tag 1</div>
<div>Tag 2</div>
<div>Tag 3</div>
<div>Tag 4</div>
<div>Tag 5</div>
<div>Tag 6</div>
<div>Tag 7</div>
'''
soup = BeautifulSoup(txt, 'html.parser')
for div in soup.select('div:nth-of-type(-n+5)'):
print(div.text)
打印:
Tag 1
Tag 2
Tag 3
Tag 4
Tag 5
【讨论】:
.find_all()找到的所有元素中的前5个元素
:nth-child(),但类似的规则也适用于此。或在这里stackoverflow.com/questions/11922165/…