python - 需要按顺序提取列表元数据,但所有标签都是相同的 - 如何检索?
问题描述
我正在尝试检索帖子元数据(绿色按钮和棕色按钮),如下图红色所示。
在 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'))
最后一张图片是网站正常的样子
解决方案
看起来你们很亲近。我看到的一个问题是,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)
推荐阅读
- angular - Angular 7/Electron:在 BrowserWindow.hide 后跟 BrowserWindow.show 之后路由未完成
- laravel - Laravel vue textarea 内容未显示
- regression - 如何在 R 中的随机森林中运行回归而不是分类?
- r - 根据R中字符串的长度创建新值?
- java - BufferedWriter 即使在刷新和关闭后也不写入?
- c# - 格式化以保存为 .PDF 并占据整个页面
- javascript - 如何在jquery过滤函数中返回属性的值
- c# - C# CefSharp WebView 内存问题
- c++ - 在没有 RTTI 的情况下实现 type_id 的问题
- sql - 使用 select 将行添加到 Firebird 查询结果