Как очистить сайт с рендерингом контента от angular JS с python - PullRequest
0 голосов
/ 20 января 2020

введите описание изображения здесь Я хочу почистить контент с сайта: https://www.fireant.vn/App# / company-data / ACB .

Насколько я знаю, содержимое таблицы, которую я хочу, чтобы динамически очистить данные от Angularjs. Они используют ng-repeat, чтобы передать все значения, такие как время, объем, цена, в таблицу.

</tr><!-- end ngRepeat: quote in intradayQuotes | orderBy: '-Date' --><tr ng-repeat="quote in intradayQuotes | orderBy: '-Date'" class="ng-scope">

Этот код настолько далеко, насколько я могу получить, поскольку я действительно не знаю, какой объект Таблица

driver.get('https://www.fireant.vn/App#/company-data/ACB')
driver.set_window_position(0, 0)
driver.set_window_size(100000, 200000)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
soup = BeautifulSoup(driver.page_source, 'lxml')

Любая инструкция по этому вопросу будет очень полезна.

Данные из таблицы, которые я хочу получить Data from table i want to get

print driver.page_source

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Учитывая скриншот, который вы разместили, кажется, что Price и Time имеют идентичные атрибуты элемента HTML - однако вы можете использовать индексацию XPath в этом случае, чтобы получить нужный элемент.

Чтобы получить цену :

prices = driver.find_elements_by_xpath("//tbody/tr[2]/td[2]/b[@class='ng-binding']")

На основании скриншота выглядит, что текст «Price» находится во 2-м элементе tr в tbody, а ячейка «Price» - это 2-й элемент td под tr. Хотя я обычно не рекомендую этот тип синтаксиса, ваш сценарий представляет собой особый случай, когда HTML почти все идентичны.

0 голосов
/ 21 января 2020

Вы захотите покопаться на сайте, чтобы найти селекторы CSS (или xpath, если вам удобнее использовать xml), и использовать их для получения интересующих вас элементов / текста.

Вместо использования красивого супа для Angular (и другого Javascript визуализированного контента) вы можете просто получить данные прямо с веб-драйвера.

например:

# driver.find_element_by_css_selector('<SELECTOR FOR THE ELEMENTS YOU WANT>')

prices = driver.find_elements_by_class_name('.price').text 
# Returns an array of text of all elements that have the .price class. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...