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

时间:2018-08-03 01:25:01

标签: python beautifulsoup

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

#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开始。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您的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)

答案 2 :(得分:0)

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

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