首页 > 解决方案 > 需要按顺序提取列表元数据,但所有标签都是相同的 - 如何检索?

问题描述

我正在尝试检索帖子元数据(绿色按钮和棕色按钮),如下图红色所示。

绿色按钮和棕色按钮

在 HTML 标签中,它们属于每个列表的同一类和标签,因此我最终要么只打印所有绿色按钮元数据或只打印棕色按钮元数据,而不是按照帖子的顺序依次打印它们,如下图所示图片

绿色按钮和棕色按钮 html 结构

我从字面上花了 2 天,并没有想出答案。有人可以帮忙吗?

对于那些有兴趣查看原始网站的人

网址:https ://stamprally.org/?search_keywords=&search_keywords_operator=and&search_cat1=66&search_cat2=0

理想情况下,如果有一种方法可以从单个列表中提取数据 - 提取 GreenButton 元数据和 BrownButton 元数据 移动到第二个列表并执行相同操作,直到没有更多列表

做了这么久,我的大脑现在处于融化的边缘......

当前代码如下(仅打印 GreenButton Metadata 和 BrownButton Metadata= Wrong T_T)

postContainer = driver.find_elements_by_xpath(
                '//*[@id="post_list2"]')
            for li in postContainer:
                print('Thumbnail', li.find_element_by_css_selector(
                    'img').get_attribute('src'))
                # totalMetadataCount = li.find_elements_by_css_selector(
                #     'span.cat-category')[1].get_attribute('title')
                postMetadataContainer = []
                for category in li.find_elements_by_css_selector('span.cat-category'):
                    print(category.get_attribute('title'))
                for category in li.find_elements_by_css_selector('span.cat-category2'):
                    print(category.get_attribute('title'))

未折叠的 html 结构

最后一张图片是网站正常的样子

网站正常视图

标签: pythonhtmlcssseleniumweb-crawler

解决方案


看起来你们很亲近。我看到的一个问题是,postContainer您正在遍历 OL 标签,但只有一个。您需要遍历 OL 下的 LI,因此我更改了您的第一个定位器。

变量命名很重要。它可以帮助您阅读代码,还可以在您编写时或将来需要更新时调试代码等。我更改了您的一些变量名称以与页面上的内容更加一致。我添加了更多标签,然后缩进了标签,以便更容易看到标题,然后是该标题的子项。

articles = driver.find_elements_by_css_selector('#post_list2 > li')
for article in articles:
    print('Title:', article.find_elements_by_css_selector('h3').text)
    print('  Thumbnail:', article.find_element_by_css_selector('img').get_attribute('src'))
    print('  Green categories:')
    for category in article.find_elements_by_css_selector('span.cat-category'):
        print('    ', category.text)
    print('  Brown categories:')
    for category in article.find_elements_by_css_selector('span.cat-category2'):
        print('    ', category.text)

推荐阅读