从 Python 中的 bs4.element.ResultSet 获取 "li" 中包含的文本和链接

Get text and links contained inside "li" from a bs4.element.ResultSet in Python

[<div class="rotation"><ol>
<li><a href="https://www.geeksforgeeks.org/array-rotation/">Program for array rotation</a><li></ol></div>]

在上面的<class 'bs4.element.ResultSet'>中,我想提取文本Program for array rotation和link"https://www.geeksforgeeks.org/array-rotation/"

我如何使用 Python 做到这一点?

如果您只想提取一个 link,您可以使用:

link = soup.select_one('li a[href]')['href']
text = soup.select_one('li a[href]').text
print(link, text)

但要更通用,您可以 select 所有 <a>,然后用 dict comprehension 迭代 ResultSet 以获得独特的 hreftext 个值,因此也适用于单个项目:

html = '''
<div class="rotation"><ol>
<li><a href="https://www.geeksforgeeks.org/array-rotation/">Program for array rotation1</a><li>
<li><a href="https://www.geeksforgeeks.org/array-rotation/">Program for array rotation2</a><li></ol></div>
'''

soup = BeautifulSoup(html)

{a['href']:a.text for a in soup.select('div.rotation li a[href]')}

输出:

{'https://www.geeksforgeeks.org/array-rotation/': 'Program for array rotation2'}

或使用 list comprehension 获得所有变体:

[{a['href']:a.text} for a in soup.select('div.rotation li a[href]')]

输出:

[{'https://www.geeksforgeeks.org/array-rotation/': 'Program for array rotation1'},
{'https://www.geeksforgeeks.org/array-rotation/': 'Program for array rotation2'}]