【问题标题】:Selenium Python - Get Table Data Instead of JavaScript CodeSelenium Python - 获取表格数据而不是 JavaScript 代码
【发布时间】:2020-03-24 05:33:09
【问题描述】:

我需要一些关于数据抓取任务的帮助:https://soilhealth.dac.gov.in/NewHomePage/NutriPage 我设法填写下拉菜单并使用此代码单击查看:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from bs4 import BeautifulSoup

url = "https://soilhealth.dac.gov.in/NewHomePage/NutriPage"
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
driver.get(url)

select = Select(driver.find_element_by_id('NutriCatId'))
select.select_by_visible_text('Sample Wise')
select = Select(driver.find_element_by_id('CycleId'))
select.select_by_visible_text('All Cycle')
select = Select(driver.find_element_by_id('State_Code'))
select.select_by_visible_text('Andaman And Nicobar Islands')
driver.implicitly_wait(5)
select = Select(driver.find_element_by_id('District_Code'))
select.select_by_visible_text('Nicobars')
driver.find_element_by_id('s').click()
driver.implicitly_wait(30)
soup_level1=BeautifulSoup(driver.page_source, 'lxml')

我需要从源代码中抓取表数据,而不是将其放在soup_level1 xml 中,我只有javascript 代码。 了解是否可以使用 Selenium 抓取数据的任何帮助都是可能的,我该怎么做会很糟糕。 感谢您的帮助。

【问题讨论】:

  • 仅供参考,它是 scrape(和 scrapescrapedscraper)不是报废

标签: javascript python selenium web-scraping


【解决方案1】:

嘿,下面的代码可以完成这项工作。但是它很慢,因为表很大并且需要一些时间来解析。我观察到该报告有一个可用的导出选项,因此请尝试使用 Selenium 直接下载它。哦,为了解释,报告是作为与页面的默认源不同的 iframe 生成的,因此您需要切换到该框架以获取信息。请让我知道任何澄清。所需数据在 df 变量中。

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 24 11:08:32 2020

@author: prakh
"""

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from bs4 import BeautifulSoup
import pandas as pd
import time

url = "https://soilhealth.dac.gov.in/NewHomePage/NutriPage"
driver = webdriver.Chrome(executable_path='C:/Users/prakh/Documents/PythonScripts/chromedriver.exe') 
driver.get(url)

select = Select(driver.find_element_by_id('NutriCatId'))
select.select_by_visible_text('Sample Wise')
select = Select(driver.find_element_by_id('CycleId'))
select.select_by_visible_text('All Cycle')
select = Select(driver.find_element_by_id('State_Code'))
select.select_by_visible_text('Andaman And Nicobar Islands')
driver.implicitly_wait(5)
select = Select(driver.find_element_by_id('District_Code'))
select.select_by_visible_text('Nicobars')
driver.find_element_by_id('s').click()
driver.implicitly_wait(30)
#soup_level1=BeautifulSoup(driver.page_source, 'lxml')

#src = driver.find_element_by_xpath('//*[@id="report"]/iframe').get_attribute("src")

driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="report"]/iframe'))
time.sleep(10)

html = driver.page_source
df_list = pd.read_html(html)
df = df_list[-3]

driver.quit()

【讨论】:

  • 为我完成了这项工作。不管它是否慢,这将是一次运行代码。非常感谢您的帮助。
  • 如果您认为问题已解决,请点击我的回答左侧的复选标记接受回答。并随时为答案投票。
  • 赞成,因为我的声誉低于 15,所以没有考虑到 :(。再次感谢。
猜你喜欢
  • 2022-01-08
  • 2021-03-15
  • 2021-08-21
  • 2020-10-31
  • 2017-01-26
  • 2019-09-16
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
相关资源
最近更新 更多