python - 使用 python 抓取网页 - 不断从 jquery 表中获取重复的第一行值
问题描述
试图从这个https://apps.neb-one.gc.ca/REGDOCS/Search/SearchAdvancedResults?p=4中抓取“名称”列的列表是我的简单代码:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://apps.neb-one.gc.ca/REGDOCS/Search/SearchAdvancedResults?
p=4')
driver.implicitly_wait(5)
rows = driver.find_elements_by_xpath('//*[@id="details-
elements"]/table/tbody/tr')
output = []
for row in rows:
title = row.find_element_by_xpath('//*[@id="details-
elements"]/table/tbody/tr/td[1]/details/summary/a').get_attribute('text')
output.append(title)
driver.close()
print(output)
它部分有效。但由于某种原因,该代码将仅返回 20 个项目(正确长度)的列表,其中包括重复的第一行的名称(正确列)(呃……如此接近)。像这样:
['Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt -
Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5', 'Receipt - Accusé de réception - A6F0I5']
我忽略了什么简单的事情?
解决方案
尝试以下代码以获得所需的输出:
output = [item.text for item in driver.find_elements_by_tag_name('summary')]
PS 请注意,如果要获取每个的后代,则row
需要在 XPath 表达式的开头指定点(上下文):
for row in rows:
row.find_element_by_xpath('.//descendant_node') # '//descendant_node' will always return you the first found node in DOM
推荐阅读
- vaadin14 - vaadin flow vaadin-split-layout 组件没有 onclick 事件
- python - 名称错误与 openpyxl
- mysql - 从终端运行烧瓶应用程序时,无法通过套接字'/var/run/mysqld/mysqld.sock 连接到本地 MySQL 服务器
- javascript - 在 Linux Mint 上运行 Nextjs 应用程序给了我这个错误
- django - 如何在 Auth 视图 LoginView 中编写此功能视图?
- c# - 使用 c# 更新 CRM 中查找字段中的值
- reactjs - react 如何获取元素中包含的文本行数?
- mysql - MySQL:varchar(64) 与 varchar(255),小字符串有区别吗?
- php - WP-Pagenavi 无法在最新帖子的静态主页中工作
- python - AttributeError:“WifiCall”对象没有属性“master”