Как создать таблицу на веб-сайте .ASPX с несколькими таблицами?

#python #asp.net #web #web-scraping #beautifulsoup

#python #asp.net #веб #очистка веб-страниц #beautifulsoup

Вопрос:

Я работаю над очисткой данных о почве из https://websoilsurvey.sc.egov.usda.gov/App/WebSoilSurvey.aspx Я создал следующие параметры, чтобы выбрать интересующую область, запустить отчет, и у меня осталась таблица данных о почве на странице с несколькими таблицами. Я не знаком с очисткой таблиц, и я никогда раньше не писал на сайте .ASPX.

Вся онлайн-документация по синтаксическому анализу с помощью Beautiful Soup требует получения URL-адреса, в котором находится таблица. Мой URL на .Сайт ASPX не меняется при вводе параметров, поэтому я не могу использовать указанный выше URL-адрес (он остается этим URL-адресом все время). Тогда на сайте есть несколько таблиц, поэтому мне нужно будет классифицировать, какую из них мне нужно очистить.

Есть идеи о том, как разобрать эту таблицу?

 import selenium
from selenium import webdriver
from selenium.webdriver.support.ui import Select
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import xlrd
import os
from openpyxl import load_workbook
import win32com.client as win32
import openpyxl as xl
import pandas as pd
import numpy as np
from bs4 import BeautifulSoup as bs



# Downloading File #

# Using Chrome to access web
driver = webdriver.Chrome()
delay = 5
# Open the website
driver.get('https://websoilsurvey.sc.egov.usda.gov/App/WebSoilSurvey.aspx')

# Soil Survey Area
while True:
    try:
        driver.find_element_by_xpath('//*[@id="Quick_Navigation_Soil_Survey_Area_header"]/span/span').click()
        break
    except:
        continue

states = ['ND', 'SD', 'MN']

for state in states:
# Select State
    select = Select(driver.find_element_by_id('ssa_select_state'))
    select.select_by_value(state)
    while True:
        try:
            myElem = WebDriverWait(driver, delay).until(EC.text_to_be_present_in_element((By.XPATH, '//*[@id="navigateBySSAGrid"]/div[2]/div[1]/div[3]'), state))
            break
        except:
            continue
    select = driver.find_element_by_id('ssa_county_select')
    selectall = Select(driver.find_element_by_id('ssa_county_select'))
    counties = [x for x in select.find_elements_by_tag_name('option')]
    for county in counties[1:]:
        # Print for checks
        print('Total Counties for '   state   ': '   str(len(counties[1:])))
        # Select County
        selectall.select_by_value(county.get_attribute('value'))
        myElem = WebDriverWait(driver, delay).until(EC.text_to_be_present_in_element((By.XPATH, '//*[@id="navigateBySSAGrid"]/div[2]/div[1]/div[3]'), county.get_attribute('value')))
        # Click first county bubble
        time.sleep(3)
        
        driver.execute_script("arguments[0].click();", bubble)
        # Set AOI
        time.sleep(1)
        driver.find_element_by_xpath('//*[@id="navigatebyssaformid"]/div[3]/button[1]').click()
        # Click Soil Data Explorer tab
        time.sleep(4)
        driver.find_element_by_xpath('//*[@id="Soil_Data_Explorer"]').click()
        # Expand Vegetative Productivity
        myElem = WebDriverWait(driver, delay).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="Vegetative_Productivity_unfold"]')))
        driver.find_element_by_xpath('//*[@id="Vegetative_Productivity_unfold"]').click()
        # Expand Crop Productivity Index
        time.sleep(3)
        driver.find_element_by_xpath('//*[@id="Vegetative_Productivity_Crop_Productivity_Index_header"]/span/span').click()
        # View Rating
        myElem = WebDriverWait(driver, delay).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="ParameterForm190ViewRating_bottom"]')))
        driver.find_element_by_xpath('//*[@id="ParameterForm190ViewRating_bottom"]').click()
        # Parse table
    break
  

Комментарии:

1. На стороне клиента вы создаете экземпляр браузера. Затем вручную введите значения, а затем, после того как страница отобразит правильные данные, вы сохраните эту страницу. В .net мы склонны избегать параметров, поскольку они ужасны, и мы пишем красиво vb.net или C # на основе элементов управления на этой странице, и когда вы нажмете «просмотр», тогда снова серверный код, написанный на c # / vb.net, будет выполняться и отображаться на основе этих управляющих значений. Довольно сложно для кода на стороне клиента нажимать правильные кнопки, вводить значения, а затем разрешать отображение страницы. Ваше клиентское программное обеспечение создает экземпляр браузера, затем вы вводите его вручную, а затем сохраняете страницу

2. Как только страница отображается с нужными данными, любой код может извлекать использовать этот DOM из этого экземпляра браузера. В то время как asp.net будет использовать серверный код (c #, vb.net ), конечная результирующая страница — это просто страница браузера. Итак, вам очень нужен работающий экземпляр браузера — просматривайте, нажимайте, переходите к тому, что вы хотите на этой странице, а затем программа хостинга в этот момент может сохранить / проанализировать эту веб-страницу. Большинство страниц aspx не управляются параметрами, поэтому у вас нет URL-адреса для ввода или использования, чтобы перейти к конечной желаемой странице с нужными данными.