Как очистить данные скрытых классов с помощью селена и красивого супа - PullRequest
1 голос
/ 19 июня 2020

Я пытаюсь очистить java содержимое веб-страницы с включенным скриптом. Мне нужно извлечь данные из таблицы этого веб-сайта. Однако в каждой строке таблицы есть кнопка (стрелка), с помощью которой мы получаем дополнительную информацию об этой строке.

Мне нужно извлечь это дополнительное описание каждой строки. При проверке было замечено, что содержимое этих стрелок каждой строки принадлежит одному и тому же классу. Однако класс скрыт в исходном коде. Это можно увидеть только при осмотре. Данные, которые я пытаюсь сократить, взяты с веб-страницы .

Я использовал селен и красивый суп. Я могу очистить данные таблицы, но не содержимое этих стрелок в таблице. Мой python возвращает мне пустой список для класса этой стрелки. Но работает для класса обычных табличных данных.

from bs4 import BeautifulSoup
from selenium import webdriver

browser = webdriver.Firefox()
browser.get('https://projects.sfchronicle.com/2020/layoff-tracker/')
html_source = browser.page_source  
soup = BeautifulSoup(html_source,'html.parser')
data = soup.find_all('div',class_="sc-fzoLsD jxXBhc rdt_ExpanderRow")
print(data.text)

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Для печати скрытых данных вы можете использовать следующий пример:

import re
import json
import requests
from bs4 import BeautifulSoup


url = 'https://projects.sfchronicle.com/2020/layoff-tracker/'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
data_url = 'https://projects.sfchronicle.com' + soup.select_one('link[href*="commons-"]')['href']

data = re.findall(r'n\.exports=JSON\.parse\(\'(.*?)\'\)', requests.get(data_url).text)[1]
data = json.loads(data.replace(r"\'", "'"))

# uncomment this to see all data:
# print(json.dumps(data, indent=4))

for d in data[4:]:
    print('{:<50}{:<10}{:<30}{:<30}{:<30}{:<30}{:<30}'.format(*d.values()))

Печать:

Company                                           Layoffs   City                          County                        Month                         Industry                      Company description           
Tesla (Temporary layoffs. Factory reopened)       11083     Fremont                       Alameda County                April                         Industrial                    Car maker                     
Bon Appetit Management Co.                        3015      San Francisco                 San Francisco County          April                         Food                          Food supplier                 
GSW Arena LLC-Chase Center                        1720      San Francisco                 San Francisco County          May                           Sports                        Arena vendors                 
YMCA of Silicon Valley                            1657      Santa Clara                   Santa Clara County            May                           Sports                        Gym                           
Nutanix Inc. (Temporary furlough of 2 weeks)      1434      San Jose                      Santa Clara County            April                         Tech                          Cloud computing               
TeamSanJose                                       1304      San Jose                      Santa Clara County            April                         Travel                        Tourism bureau                
San Francisco Giants                              1200      San Francisco                 San Francisco County          April                         Sports                        Stadium vendors               
Lyft                                              982       San Francisco                 San Francisco County          April                         Tech                          Ride hailing                  
YMCA of San Francisco                             959       San Francisco                 San Francisco County          May                           Sports                        Gym                           
Hilton San Francisco Union Square                 923       San Francisco                 San Francisco County          April                         Travel                        Hotel                         
Six Flags Discovery Kingdom                       911       Vallejo                       Solano County                 June                          Entertainment                 Amusement park                
San Francisco Marriott Marquis                    808       San Francisco                 San Francisco County          April                         Travel                        Hotel                         
Aramark                                           777       Oakland                       Alameda County                April                         Food                          Food supplier                 
The Palace Hotel                                  774       San Francisco                 San Francisco County          April                         Travel                        Hotel                         
Back of the House Inc                             743       San Francisco                 San Francisco County          April                         Food                          Restaurant                    
DPR Construction                                  715       Redwood City                  San Mateo County              April                         Real estate                   Construction                  

...and so on.
0 голосов
/ 19 июня 2020

Интересующий вас контент создается, когда вы нажимаете кнопку, поэтому вам нужно найти кнопку. Миллион способов сделать это, но я бы предложил что-то вроде:

element = driver.find_elements(By.XPATH, '//button')

для вашего конкретного c случая, вы также можете использовать:

element = driver.find_elements(By.CSS_SELECTOR, 'button[class|="sc"]')

Как только вы получите элемент кнопки , затем мы можем выполнить:

element.click()

Анализ страницы после этого должен дать вам сгенерированный javascript контент, который вы ищете

...