【发布时间】:2016-10-30 23:43:36
【问题描述】:
我需要从已在 BeautifulSoup 中解析的四个字符串中提取数据。它们是:
Arkansas72.21:59 AM76.29:04 AM5.22977.37:59 AM
Ashley71.93:39 AM78.78:59 AM0.53678.78:59 AM
Bradley72.64:49 AM77.28:59 AM2.41877.28:49 AM
Chicot-40.19:04 AM-40.19:04 AM2.573-40.112:09 AM
例如,第一个字符串中的数据是 Arkansas、72.1、1:59 AM、76.2、9:04 AM、5.2、29、77.3 和 7:59 AM。有没有简单的方法可以做到这一点?
编辑:完整代码
import urllib2
from bs4 import BeautifulSoup
import time
def scraper():
#Arkansas State Plant Board Weather Web data
url1 = 'http://170.94.200.136/weather/Inversion.aspx'
#opens url and parses HTML into Unicode
page1 = urllib2.urlopen(url1)
soup1 = BeautifulSoup(page1, 'lxml')
#print(soup.get_text()) gives a single Unicode string of relevant data in strings from the url
#Without print(), returns everything in without proper spacing
sp1 = soup1.get_text()
#datasp1 is the chunk with the website data in it so the search for Arkansas doesn't return the header
#everything else finds locations for Unicode strings for first four stations
start1 = sp1.find('Today')
end1 = sp1.find('new Sys.')
datasp1 = sp1[start1:end1-10]
startArkansas = datasp1.find('Arkansas')
startAshley = datasp1.find('Ashley')
dataArkansas = datasp1[startArkansas:startAshley-2]
startBradley = datasp1.find('Bradley')
dataAshley = datasp1[startAshley:startBradley-2]
startChicot = datasp1.find('Chicot')
dataBradley = datasp1[startBradley:startChicot-2]
startCleveland = datasp1.find('Cleveland')
dataChicot = datasp1[startChicot:startCleveland-2]
print(dataArkansas)
print(dataAshley)
print(dataBradley)
print(dataChicot)
【问题讨论】:
-
您能否也显示
BeautifulSoup特定部分?我怀疑问题可能在于您如何从 HTML 中提取这些数据。 -
正则表达式可以做
-
@Copperfield:确实,正则表达式符合要求。但我认为 alecxe 认为这是 XY problem 是正确的。
-
这完全取决于值的一致性。它们是否总是相同的,否则将很难确定第一行中的
5.22977.3之类的内容。可能是:5.22 97 7.3或5.2 29 77.3有时也会发生同样的情况。是-40.11 2:09AM还是-40.1 12:09AM,除非对数据有明确的规则,否则您将无法正确解析数据。 -
170.94.200.136/weather/Inversion.aspx温度数据始终保留一位小数,但时间和倒数第三个值可以是多个字符/
标签: python beautifulsoup urllib2 bs4