【问题标题】:How to use Selenium to get content from a table and filter it如何使用 Selenium 从表格中获取内容并过滤它
【发布时间】:2021-07-07 21:04:08
【问题描述】:

我只想为我的不准确问题道歉。所以我的问题是我编写了一个 Python 脚本来打开一个音乐数据库网站,然后它会查找某个艺术家(在我的例子中是“cro”)。之后,会出现一个表,我想从中提取数据。我的代码如下所示:

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)

driver.get("https://repsearch.ppluk.com/")
print(driver.title)

search = driver.find_element_by_name("pt1:rec_band_artist")
search.send_keys("cro")
search.send_keys(Keys.RETURN)
    
try:
    table = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "pt1:searchResultsTable::db"))
    )
except:
    driver.quit()

print(table.text)

driver.quit()

input()

表格中有多个列,例如“艺术家姓名”、“录音标题”、“发行日期”等。如果“发布日期”的值为“2021”,我希望程序打印一行。录音标题“ALLES DOPE”有这个值,所以程序应该只打印“ALLES DOPE”所在行的信息。

In the following, you can see how the table looks like

您可能已经猜到了,我是 python 的菜鸟。我几周前才开始查找这个问题,但找不到任何有用的帮助。所以提前感谢

【问题讨论】:

    标签: python selenium html-table


    【解决方案1】:

    要进行搜索,请尝试以下操作:

    search = driver.find_element_by_xpath("//input[contains(@ID,'rec_band_artist') and contains(@class,'af_inputText_content')]")
    search.send_keys("cro")
    search.send_keys(Keys.RETURN)
    

    您使用的定位器并不总是有效。 看到表格后: 循环遍历它并将所有信息获取到具有属性的对象中:

    • 姓名
    • 标题
    • isrc
    • 权利人
    • 录音日期
    • 持续时间。

    为此,您需要为所有行找到一个唯一的定位器,并将其中的数据获取到您的对象中。

    当您拥有该对象时,您可以从那里提取任何数据。 我会使用这种方法... 如您所见,您的问题并不容易。您要求编写整个程序。

    我建议你把它分成几部分,谷歌从表中获取数据的方法。

    编辑: 查找表格行相对容易。要查找所有行,请使用: rows = driver.find_elements_by_css_selector(".af_table_data-row")

    接下来,查找名称并使用:

    name = driver.find_element_by_css_selector(".af_table_data-row>td:nth-child(1)")
    title = driver.find_element_by_css_selector(".af_table_data-row>td:nth-child(2)")
    

    等等。

    【讨论】:

    • 给我几天时间试试这个。学校很重 ^^
    【解决方案2】:

    试试这个:

    for i in range(1,16):
        row = driver.find_element_by_xpath(f'//*[@id="pt1:searchResultsTable::db"]/table/tbody/tr[{i}]').text
        year = driver.find_element_by_xpath(f'//*[@id="pt1:searchResultsTable::db"]/table/tbody/tr[{i}]/td[5]').text
        YOUR_YEAR = '2021'
        if year == YOUR_YEAR:
            print(row)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多