Python:如何在 BeautifulSoup4 中获取 li 标签列表

Python: How can i get a list of li tags in BeautifulSoup4

提问人:Seyedmahdi moosavyan 提问时间:6/12/2023 更新时间:6/13/2023 访问量:29

问:

我正在尝试抓取一个波斯语网页,我想从包含 3 个标签的 ul 中获得 6 个 li 标签。我的问题是每个 li 都有嵌套的 li 标签,当我使用 soup.find_all('li') 时,它会找到所有 li 标签(包含嵌套的标签)

我无法上传 HTML 汤,因为它渴望堆栈溢出

网页链接

汤来自网页的这一部分:这是一个政府网站,所以它可能有 15 年没有更新

python html beautifulsoup html 解析

评论

1赞 Scott Hunter 6/12/2023
您忘记发布您尝试解决此问题的相关部分。

答:

0赞 Andrej Kesely 6/13/2023 #1

你可以尝试递归来解析链接树结构:

import requests
from bs4 import BeautifulSoup


def get_links(ul, path=None):
    if path is None:
        path = []

    for li in ul.find_all('li', recursive=False):
        if li.ul:
            yield from get_links(li.ul, path + [li.a])
        else:
            yield path + [li.a]

url = 'http://chap.sch.ir/'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')

ul = soup.select_one('#block-taxonomy-menu-block-1 ul')
for links in get_links(ul):
    print('Path: ')
    print(' -> '.join(p.text for p in links))
    print('URLS: ')
    print(' -> '.join(p['href'] for p in links))
    print('-'*80)

指纹:


...

Path: 
کتاب های درسی استثنایی -> کتاب راهنمای تدریس (راهنمای معلم) -> آمادگی و ابتدایی
URLS: 
/category/%D8%AF%D9%88%D8%B1%D9%87/631 -> /category/%D8%AF%D9%88%D8%B1%D9%87/682 -> /category/%D8%AF%D9%88%D8%B1%D9%87/684
--------------------------------------------------------------------------------
Path: 
کتاب های درسی استثنایی -> کتاب راهنمای تدریس (راهنمای معلم) -> دوره اول متوسطه پیش حرفه ای
URLS: 
/category/%D8%AF%D9%88%D8%B1%D9%87/631 -> /category/%D8%AF%D9%88%D8%B1%D9%87/682 -> /category/%D8%AF%D9%88%D8%B1%D9%87/685
--------------------------------------------------------------------------------
Path: 
کتاب های درسی استثنایی -> کتاب راهنمای تدریس (راهنمای معلم) -> دوره دوم متوسطه حرفه ای
URLS: 
/category/%D8%AF%D9%88%D8%B1%D9%87/631 -> /category/%D8%AF%D9%88%D8%B1%D9%87/682 -> /category/%D8%AF%D9%88%D8%B1%D9%87/686
--------------------------------------------------------------------------------