使用漂亮的汤在无序列表中选择单个项目



我正在尝试对漂亮汤解析的项目列表进行排序。每个项目都有一个唯一的链接和文本,但除了列表中的第一个项目外,我不知道如何选择单个项目。

#Finds all div's with class image_list
containers = page_soup.findAll("div", {"class": "image_list"})
#selects the ul with the links I want to sort through
RHAZ = containers[1]

以下是我尝试过的一些没有运气的东西:

#200 is one of the unique numbers a li has.
RHAZ.li.findAll("a", {"href":"200"})
RHAZ.li.findAll("a", {"text":"200"})

这就是页面中的HTML看起来像

<div class="image_list">
<ul>
<li><a href="./?s=2127&camera=RHAZ%5F">Sol 2127 (4 img)</a></li>
<li><a href="./?s=2126&camera=RHAZ%5F">Sol 2126 (4 img)</a></li>
....

这是从2127-1。

找到分区,然后找到分区中的列表项。对于每个项目,获取其"a"标记和标记的属性。

import bs4
soup = bs4.BeautifulSoup('''<div class="image_list">
<ul>
<li><a href="./?s=2127&camera=RHAZ%5F">Sol 2127 (4 img)</a></li>
<li><a href="./?s=2126&camera=RHAZ%5F">Sol 2126 (4 img)</a></li>''')
for li in soup.find("div", {"class": "image_list"}).findAll('li'):
print(li.a.text, li.a['href'])
#Sol 2127 (4 img) ./?s=2127&camera=RHAZ%5F
#Sol 2126 (4 img) ./?s=2126&camera=RHAZ%5F

您的href文本和href都不等于200,请尝试使用此

import re
RHAZ.li.find_all("a", href=re.compile("RHAZ"))
RHAZ.li.find_all("a", href=lambda href: href and "RHAZ" in href)

您可以使用CSS选择器'div.image_lista',这将在具有类image_list:的<div>标签中找到所有<a>标签

data = """
<div class="image_list">
<ul>
<li><a href="./?s=2127&camera=RHAZ%5F">Sol 2127 (4 img)</a></li>
<li><a href="./?s=2126&camera=RHAZ%5F">Sol 2126 (4 img)</a></li>"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'lxml')
for a in soup.select('div.image_list a'):
print(a.text, a['href'])

打印:

Sol 2127 (4 img) ./?s=2127&camera=RHAZ%5F
Sol 2126 (4 img) ./?s=2126&camera=RHAZ%5F

最新更新