Почему этот тег пуст, когда разбирается с красивым супом?

Я разбираю эту страницу с красивым супом:

https://au.finance.yahoo.com/q/is?s=AAPL

Я пытаюсь получить общий доход за 27/09/2014 (42,123,000), который является одним из первых значений в заявлении в верхней части.

Я проверил элемент в хром-инструментах и ​​обнаружил, что значение находится в таблице с именем classа yfnc_tabledata1 .

Мой код python выглядит следующим образом:

 import requests import bs4 #get webpage page = requests.get("https://au.finance.yahoo.com/q/is?s=AAPL") #put into beautiful soup soup = bs4.BeautifulSoup(page.content) #select tag tag = soup.select("table.yfnc_tabledata1") 

Пока все хорошо, это захватывает таблицу, в которой есть необходимые данные, но это то место, где я застрял.

Цепочка, которая приводит к данным, которые я хочу, выглядит следующим образом:

tag > tbody > tr > td > table > tbody > (then the second tr)

Но когда я пытаюсь использовать это, я получаю пустой элемент.

Может ли кто-нибудь помочь мне в этом?

Также для бонусных очков кто-нибудь может сказать мне, как я могу научиться извлекать данные, подобные этому, в более общем смысле? Я постоянно нуждаюсь в том, чтобы извлекать данные, глубоко погруженные в HTML-документ, и никогда не может найти правильный код, чтобы получить нужные мне данные.

Большое спасибо за любую помощь.

Давайте будем конкретными и практичными .

Идея состоит в том, чтобы найти метку Total Revenue и получить текст следующей ячейки, используя .next_sibling :

 table = soup.find("table", class_="yfnc_tabledata1") total_revenue_label = table.find(text=re.compile(r'Total Revenue')) print total_revenue_label.parent.parent.next_sibling.get_text(strip=True) 

Демо-версия:

 >>> import re >>> import requests >>> import bs4 >>> >>> page = requests.get("https://au.finance.yahoo.com/q/is?s=AAPL") >>> soup = bs4.BeautifulSoup(page.content) >>> >>> table = soup.find("table", class_="yfnc_tabledata1") >>> total_revenue_label = table.find(text=re.compile(r'Total Revenue')) >>> total_revenue_label.parent.parent.next_sibling.get_text(strip=True) 42,123,000 

В HTML не существует

.

Если вы посмотрите на страницу с помощью браузера (например, с помощью инструментов разработчика Chrome), то выглядит тег

, но это поддельный тег, вставленный в DOM Chrome.

Попробуйте исключить оба тега в своей поисковой цепочке. Я уверен, что первого не существует и (хотя HTML трудно читать), я уверен, что второго тоже нет.

Обновление: вот начало HTML с интересующей вас таблицей:

 
...
Period Ending 27/09/2014 28/06/2014

поэтому нет тегов

.

Чтобы ответить на ваш общий вопрос:

Я предлагаю второе издание «Mining the Social Web». Специально глава 5 – «Горные веб-страницы».

Исходный код книги доступен здесь на github .

Я думаю, что есть, вероятно, лучшие способы получения данных, которые вы хотите? Он предоставляется бесплатно в течение нескольких лет рядом учреждений, например, информация, которую вы хотите здесь где-то?

http://www.afr.com/share_tables/