【发布时间】:2021-07-30 17:38:36
【问题描述】:
我想抓取网站 (https://www.moneycontrol.com/fixed-income/bank_fd_main.php#data) 上列出的表格的内容,其中包含 Group - Cooperative Banks, Period - 2 并将其加载到 pandas 数据框中。尽管很努力,但我无法执行包含这 3 个要求的脚本。
我无法理解是否有办法通过 find_elements_by_xpath() 或任何其他类似函数传递所有这些参数。我还尝试使用 WebDriverWait() 以便有时间加载页面的所有内容,但尽管这样做,执行程序仍返回我 NULLValueError - 因此无法找到所需的元素。
请帮助我抓取动态表以及上述 3 个要求。提前致谢!!!请找到我附加的代码。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(executable_path="/Users/sidrocks/.wdm/drivers/chromedriver/mac64/90.0.4430.24/chromedriver")
driver.get("https://www.moneycontrol.com/fixed-income/bank_fd_main.php#data")
driver.find_elements_by_xpath("//select[@name='sel_banktype']/option[@value='Cooperative Banks']")[0].click()
driver.find_elements_by_xpath("//select[@id='sel_period']/option[@value='2 < 3 yrs']")[0].click()
driver.find_elements_by_xpath('//select[@name="tax_status"]/option[@value="All"]')[0].click()
driver.find_elements_by_class_name('MT10')[0].click()
try:
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CLASS_NAME, "PA3 brd whbg")))
except TimeoutException:
pass
soup = bsp(driver.page_source, 'lxml')
driver.quit()
data = list()
table_data = soup.find("div", attrs={"class": "PA3 MT10 brd whbg"}).find("table")
# To extract individual row elements from the html page
for j in table_data.findAll('tr'):
row_data = j.findAll('td')
row = [tr.text.strip() for tr in row_data]
data.append(row)
head = data[1]
data = data[3:]
table = pd.DataFrame(data, columns=head)
print(table)
【问题讨论】:
-
仅供参考,它是 scrape(和 scraper、scraped、scraping)不是废品。 “废弃”的意思是扔掉,这与你想要做的几乎相反。
标签: python selenium-webdriver web-scraping beautifulsoup