.get()
和 .getall()
都用于从选择器中提取数据,它们之间的主要区别在于提取结果的数量:
get()
:- 用于从匹配的选择器中提取单个值。
- 如果选择器匹配了多个元素,
.get()
只会返回第一个匹配元素的值。 - 如果没有找到任何匹配项,
.get()
会返回None
。
getall()
:- 用于从匹配的选择器中提取所有值,返回一个包含所有匹配值的列表。
- 如果选择器匹配了多个元素,
.getall()
会返回一个包含所有这些元素值的列表。 - 如果没有找到任何匹配项,
.getall()
会返回一个空列表[]
。
from parsel import Selector
html = """
<ul>
<li class="item"><a href="https://example.com/item1">Item 1</a></li>
<li class="item"><a href="https://example.com/item2">Item 2</a></li>
<li class="item"><a href="https://example.com/item3">Item 3</a></li>
</ul>
"""
selector = Selector(text=html)
# 使用 .get() 提取第一个链接的 href 属性
first_link = selector.css('li.item a::attr(href)').get()
print(first_link)
# 输出: https://example.com/item1
# 使用 .getall() 提取所有链接的 href 属性
all_links = selector.css('li.item a::attr(href)').getall()
print(all_links)
# 输出: ['https://example.com/item1', 'https://example.com/item2', 'https://example.com/item3']