【问题标题】:Problem with scraping table using Xpath and Selenium使用 Xpath 和 Selenium 刮表的问题
【发布时间】:2020-07-27 05:57:41
【问题描述】:

我需要抓取附图中标记为黄色的值。 我试图抓取单个表格单元格使用:driver.find_element_by_xpath(/html/body/div[4]/div/div[2]/div[2]/div[2]/div[2]/div[5]/div[5]/div[2]/table/tbody/tr[1]/td[2])

没有用。我也在尝试使用以下代码:

table = driver.find_elements_by_id("recommendationTable")
    with open('scraper.csv', 'w', newline='') as csvfile:
        wr = csv.writer(csvfile)
        for row in table.find_elements_by_css_selector('tr'):
            wr.writerow([d.text for d in row.find_elements_by_css_selector('td')])

它也没有工作。 在图片中还有这个表格 HTML。 我想抓取这些黄色值并将它们中的每一个保存在 Excel 列中。

HTML of table

你知道如何这个东西吗? 感谢您的帮助。

【问题讨论】:

标签: python selenium xpath web-scraping geckodriver


【解决方案1】:

id 推荐表在您提供的链接中不存在。 您是否尝试通过将类名传递给 xpath 来获取表?

 table = driver.find_element_by_xpath("//table[@class='marketInfo']")
 with open('scraper.csv', 'w', newline='') as csvfile:
    wr = csv.writer(csvfile)
    for row in table.find_elements_by_xpath('.//tbody/tr'):
        wr.writerow([d.text for d in row.find_elements_by_xpath('.//td')])

【讨论】:

    【解决方案2】:

    您可以使用 xpath 来处理您的第一行:

    driver.get('https://www.bankier.pl/inwestowanie/profile/quote.html?symbol=CCC')
    driver.maximize_window()
    
    tabel = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.XPATH, "//table[@class='marketInfo']//tbody//tr[1]")))
    
    print tabel.text
    

    输出:

    【讨论】:

    • 如果您的问题得到解决,您是否愿意accept回答
    【解决方案3】:

    我建议使用 pandasread_html() 并加载到 DataFrame 然后导入到 csv

    如果你没有 pandas。安装步骤非常简单。

    pip 安装熊猫

    代码

    import pandas as pd
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium import webdriver
    
    driver=webdriver.Firefox(executable_path="path\to\gecodriver")
    driver.get("https://www.bankier.pl/inwestowanie/profile/quote.html?symbol=CCC")
    table=WebDriverWait(driver,15).until(EC.visibility_of_element_located((By.CSS_SELECTOR,".marketInfo"))).get_attribute("outerHTML")
    df=pd.read_html(str(table))[0]
    df.to_csv("scraper.csv",index=False)
    

    生成后的csv文件

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 2022-11-18
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 2010-11-30
      相关资源
      最近更新 更多