scrapy 使用Selenium对html表进行Web抓取

zqry0prt  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(154)
import pandas as pd
from selenium import webdriver
import time
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("--incognito")
global browser
options.add_argument("start-maximized")
s = Service('''C:\\Users\\rajes\\yogita\\drivers\\chromedriver.exe''')
browser = webdriver.Chrome('''C:\\Users\\rajes\\yogita\\drivers\\chromedriver.exe''')
time.sleep(2)
url = 'https://www.boerse-stuttgart.de/en/tools/finder-tools/bonds/?dateIssue.min=2022-09-30&dateIssue.max=2022-09-30'
browser.get(url)
browser.maximize_window()
time.sleep(5)
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH,'/html/body/aside/div[2]/div[2]/button[1]'))).click()
browser.implicitly_wait(20)
time.sleep(10)
Stuttgart_links = []
wkn_code = browser.find_element(By.XPATH,'//*[@id="tablesaw-317"]/tbody/tr[2]').text
print(wkn_code)

工作目标:我正在尝试刮债券给定的日期范围(30/9/2022)在网址:https://www.boerse-stuttgart.de/en/tools/finder-tools/bonds/?dateIssue.min=2022-09-30&dateIssue.max=2022-09-30
在此日期范围内有3种债券,我需要此列表中的WKN(A3 K94 C、LB 381 Q、A3 K91 M)
我的做法:
我已经尝试了Selenium方法,因为我无法使用Beautifulsoup和请求方法获取HTML表
我面临的问题:我在 selenium 元素上收到NoSuchElementException错误。常见。异常。NoSuchElementException:消息:没有此元素:找不到元素:{“方法”:“xpath”,“选择器”:“//*[@id=“表aw-317”]/tbody/tr[2]"}
我需要的帮助:我想了解为什么它不采取XPATH为那些WKN,因为我去检查铬Devtools表有,但当铬是打开的每 selenium 然后没有表。
我想知道什么是正确的方法来抓取这个网站的数据。任何帮助将不胜感激,以指导我在正确的方向。因为我是新的Python,所以尝试的方法,我知道通过教程,但没有帮助。

vlju58qv

vlju58qv1#

您需要标识表元素,然后使用get_attribute("outerHTML")
然后使用pd.read_html()

browser.get("https://www.boerse-stuttgart.de/en/tools/finder-tools/bonds/?dateIssue.min=2022-09-30&dateIssue.max=2022-09-30")
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH,'/html/body/aside/div[2]/div[2]/button[1]'))).click()
table=WebDriverWait(browser,20).until(EC.presence_of_element_located((By.CSS_SELECTOR,"table[id^='tablesaw']"))).get_attribute("outerHTML")
df=pd.read_html(table)[0]
print(df)

输出量:

WKN  ...                                       Actions
0  A3K94C  ...  Aktionen  Add to watchlist  Add to Portfolio
1  LB381Q  ...  Aktionen  Add to watchlist  Add to Portfolio
2  A3K91M  ...  Aktionen  Add to watchlist  Add to Portfolio

[3 rows x 9 columns]

相关问题