Не могу веб-скрап html таблицы красивый суп

Попытка удалить данные таблицы IPO отсюда: https://www.iposcoop.com/last-12-months/

Вот мой код:

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.iposcoop.com/last-12-months/'
page = requests.get(url)
soup = BeautifulSoup(page.text, 'lxml')
table1 = soup.find("table",id='DataTables_Table_0')
table1_data = table1.tbody.find_all("tr")
table1

Тем не менее, таблица1 не является типом. Это почему? Любое решение? Я прочитал связанные вопросы, iframe, похоже, не является ответом.

Потому что в исходнике нет таблицы с ID DataTables_Table_0. Вы, вероятно, смотрите на исходный код в своем браузере, а BeautifulSoup не видит его. BS не выполняет JavaScript, и эта таблица, вероятно, создается динамически с использованием JS.

DocZerø 20.03.2022 21:20

любое простое решение для этого, все еще использующее BeautifulSoup или Selenium?

Crystal Kwan 20.03.2022 21:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете получить данные таблицы, используя pandas

import pandas as pd
import requests 
from bs4 import BeautifulSoup

url='https://www.iposcoop.com/last-12-months'
req=requests.get(url).text
soup=BeautifulSoup(req,'lxml')
table=soup.select_one('.standard-table.ipolist')
table_data =pd.read_html(str(table))[0]
print(table_data)

Выход:

                 Company  Symbol  ...   Return SCOOP Rating
0                                         Akanda Corp.    AKAN  ...   85.00%          S/O     
1    The Marygold Companies, Inc. (aka Concierge Te...    MGLD  ...    9.50%          S/O     
2                            Blue Water Vaccines, Inc.     BWV  ...  343.33%          S/O     
3            Meihua International Medical Technologies    MHUA  ...  -33.00%          S/O     
4                                        Vivakor, Inc.    VIVK  ...  -49.40%          S/O     
..                                                 ...     ...  ...      ...          ...     
355                Khosla Ventures Acquisition Co. III    KVSC  ...   -2.80%          S/O     
356           Dragoneer Growth Opportunities Corp. III    DGNU  ...   -2.40%          S/O     
357                                        Movano Inc.    MOVE  ...  -43.60%          S/O     
358         Supernova Partners Acquisition Company III  STRE.U  ...    0.10%          S/O     
359                           Universe Pharmaceuticals     UPC  ...  -74.00%          S/O     

[360 rows x 10 columns]

большое спасибо, это очень эффективно

Crystal Kwan 20.03.2022 21:39

короче table_data = pd.read_html('https://www.iposcoop.com/last-12-months')[0]

furas 20.03.2022 21:45

Хотя ответ Ф. Хока дает вам решение, похоже, он не отвечает, почему ваш код выдает ошибку.

Вы пытаетесь найти таблицу с идентификатором DataTables_Table_0. Открыв страница в браузере, вы увидите, что такой элемент с данным идентификатором существует. Но если вы откроете ту же страницу после отключения Javascript, вы увидите, что идентификатор больше не существует в таблице. Этот идентификатор назначается некоторым модулем javascript.

BeautifulSoup может получать только базовый HTML и не запускает модули javascript. Итак, у вас есть 2 решения:

  1. Используйте селектор, существующий в базовом HTML (в данном случае .standard-table.ipolist)
  2. Используйте селен для запуска Javascript и получения HTML-кода в том виде, в котором он отображается в браузере.

Большое спасибо за предоставление этой информации. очень содержательная заметка

Crystal Kwan 20.03.2022 21:52

Другие вопросы по теме