【问题标题】: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
输出:
【解决方案3】:
我建议使用 pandas 到 read_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文件