Таблица не обрабатывается правильно python BeautifulSoup - PullRequest
3 голосов
/ 20 июня 2020

У меня есть следующий код, который пытается очистить основную таблицу на этой странице. Мне нужно получить NORAD ID и дату запуска во 2-м и 4-м столбцах. Однако я не могу заставить BeutifulSoup найти таблицу по ее идентификатору.

import requests
from bs4 import BeautifulSoup

data = []

URL = 'https://www.n2yo.com/satellites/?c=52&srt=2&dir=1'
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')

table = soup.find("table", id="categoriestab")
rows = table.find_all('tr')

for row in rows:
    cols = row.find_all('td')
    cols = [ele.text.strip() for ele in cols]
    data.append([ele for ele in cols if ele]) # Get rid of empty values

print(data)

Ответы [ 3 ]

1 голос
/ 20 июня 2020

Для получения NORAD ID и Launch date, вы можете попробовать:

import pandas as pd

url = "https://www.n2yo.com/satellites/?c=52&srt=2&dir=0"
df = pd.read_html(url)

data = df[2].drop(["Name", "Int'l Code", "Period[minutes]", "Action"], axis=1)
print(data)

Результат будет:

enter image description here

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

Если вы распечатаете суп и выполните поиск, вы не найдете идентификатор, который вы ищете, в выводе. Скорее всего, это означает, что эта страница отображается JavaScript. Вы можете изучить использование Phantom JS или selenium. Я использовал селен для решения такой проблемы, с которой столкнулся. Вам нужно будет скачать chrome драйвер: https://chromedriver.chromium.org/downloads. Вот код, который я использовал.

driver = webdriver.Chrome(executable_path=<YOUR PATH>, options=options)
driver.get('YOUR URL')
driver.implicitly_wait(1)
soup_file = BeautifulSoup(driver.page_source, 'html.parser')

Это настраивает драйвер для подключения к URL-адресу, ожидает его загрузки, захватывает весь код и помещает его в объект BeautifulSoup.

Надеюсь, это поможет!

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

Измените

soup = BeautifulSoup(page.content, 'html.parser')

на

soup = BeautifulSoup(page.content, 'lxml')
...