Есть ли простой способ получить содержимое из тега <pre>в фрейм данных pandas? - PullRequest
1 голос
/ 28 сентября 2019

Я пытаюсь передать содержимое предварительного тега на фрейм данных pandas, но я не смог, это то, что у меня есть:

import requests,pandas
from bs4 import BeautifulSoup

#url

url='http://weather.uwyo.edu/cgi-bin/sounding?region=samer&TYPE=TEXT%3ALIST&YEAR=2019&MONTH=09&FROM=2712&TO=2712&STNM=80222'
peticion=requests.get(url)
soup=BeautifulSoup(peticion.content,"html.parser")

#get only the pre content I want

all=soup.select("pre")[0]

#write the content in a text file

with open('sound','w') as f:
    f.write(all.text)

#read it 
df = pandas.read_csv('sound')
df

Я получаюне структурированный фрейм данных, и так как я должен сделать это с несколькими URL-адресами, я бы предпочел передавать данные непосредственно после строки 12 без необходимости записи файла.

это тот фрейм данных, который я получаю

1 Ответ

0 голосов
/ 28 сентября 2019

Это текст с фиксированной шириной, поэтому вам нужно сгенерировать строки, разделив '\ n', а затем столбцы, используя фиксированное значение ширины.Вы можете использовать csv, чтобы сэкономить на накладных расходах, но вы хотели иметь фрейм данных.

import pandas as pd
import requests
from bs4 import BeautifulSoup as bs

r = requests.get('http://weather.uwyo.edu/cgi-bin/sounding?region=samer&TYPE=TEXT%3ALIST&YEAR=2019&MONTH=09&FROM=2712&TO=2712&STNM=80222')
soup = bs(r.content, 'lxml')
pre = soup.select_one('pre').text
results = []

for line in pre.split('\n')[1:-1]:
    if '--' not in line:
        row = [line[i:i+7].strip() for i in range(0, len(line), 7)]
        results.append(row)

df = pd.DataFrame(results)
print(df)
...