BeautifulSoup найти все таблицы пустыми - PullRequest
2 голосов
/ 28 марта 2019

Я пытаюсь почистить очень простую таблицу с сайта NOAA: https://www1.ncdc.noaa.gov/pub/data/cdo/samples/PRECIP_HLY_sample_ascii.dat

Таблица представляет собой файл «.dat», и сайт выглядит в формате html. Когда я использую BeautifulSoup для чтения контента, я вижу контент очень хорошо. Однако, когда я затем ищу таблицу с помощью «find_all» или «find», я ничего не получаю, т.е. [].

Вот мой начальный код:

page = requests.get('https://www1.ncdc.noaa.gov/pub/data/cdo/samples/PRECIP_HLY_sample_ascii.dat')
soup = BeautifulSoup(page.content,'html.parser') #'html5lib' #'html.parser' 'lxml'
table = soup.find_all('table')     

Когда я набираю суп, я получаю следующее: enter image description here

Однако, когда я пытаюсь получить информацию в таблицу, она появляется пусто

table
>> []

Я пробовал следующие варианты:

page = urllib.request.urlopen('https://www1.ncdc.noaa.gov/pub/data/cdo/samples/PRECIP_HLY_sample_ascii.dat').read()

soup = BeautifulSoup(page,'lxml')
soup = BeautifulSoup(page,'html5lib') #'' #''

table = soup.findAll('table') 
table = soup.findAll("div",{"class":"line-gutter-backdrop"}) 
table = soup.find_all(True)

Однако таблица все еще пуста.

Я нашел этот вопрос похожим: Невозможно найти таблицу с помощью Python BeautifulSoup

Но моя таблица не в javascript (насколько я знаю). Это просто текст.

Я очень новичок в очистке данных и действительно не знаю, почему этот простой пример не работает. Любая помощь очень ценится. Спасибо.

1 Ответ

2 голосов
/ 28 марта 2019

Вы не можете найти тег table, потому что его нет, вы должны найти тег pre.

Вы можете попробовать этот фрагмент, он получит текст внутри таблицы:

from bs4 import BeautifulSoup as soup
import urllib

url = 'https://www1.ncdc.noaa.gov/pub/data/cdo/samples/PRECIP_HLY_sample_ascii.dat'

response = urllib.request.urlopen(url)
html = response.read()

page_soup = soup(html,'lxml')
table = page_soup.find('p')
print(table.text)

ВЫХОД:

STATION           STATION_NAME                                       ELEVATION  LATITUDE   LONGITUDE  DATE           HPCP     Measurement Flag Quality Flag 
----------------- -------------------------------------------------- ---------- ---------- ---------- -------------- -------- ---------------- ------------ 
COOP:310301       ASHEVILLE NC US                                    682.1      35.5954    -82.5568   20100101 00:00    99999                ]              
COOP:310301       ASHEVILLE NC US                                    682.1      35.5954    -82.5568   20100101 01:00        0                g              
COOP:310301       ASHEVILLE NC US                                    682.1      35.5954    -82.5568   20100102 06:00        1     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...