python - 有没有一种简单的方法可以从标记到熊猫数据框?
问题描述
我试图将 pre 标签的内容传递给 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 行之后直接传递数据,而无需编写文件。
解决方案
它是固定宽度的文本,因此您需要通过在 '\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)
推荐阅读
- java - 为什么我的循环仅在我输入一个额外的换行符时才起作用,但在循环后跳过另一段代码?
- c++ - 用于自定义类的带有 {fmt} 的自定义格式说明符
- javascript - 测试素数程序
- python - QTreeView GroupBy 字典键
- javascript - 为什么我的表创建函数没有在 JavaScript 的 fetch 调用中填充数据?
- regex - 来自多个列的 COUNTIF
- reactjs - 我在访问 ReactJS 的页眉和页脚中的道具时遇到问题。我必须在每一页上使用页眉和页脚吗?
- c - C程序将小写转换为大写以用于标准输出的小问题
- android - Unity android 应用程序在启动时崩溃,需要有关崩溃日志的指南
- c# - Alexa.NET.Request.RequestVerification 不会从执行中返回