Python 2.7 过度使用列表和字符串格式

Python 2.7 过度使用列表和字符串格式,python-2.7,beautifulsoup,Python 2.7,Beautifulsoup,这是可行的,但非常不符合Python。我确信我过度使用了字符串格式和列表。美丽的乌苏能做到吗 from bs4 import BeautifulSoup xmlurl = "http://forecast.weather.gov/MapClick.php?lat=33.37110&lon=-104.529&unit=0&lg=english&FcstType=dwml" def get_forecast(): soup = BeautifulSo

这是可行的,但非常不符合Python。我确信我过度使用了字符串格式和列表。美丽的乌苏能做到吗

from bs4 import BeautifulSoup

xmlurl = "http://forecast.weather.gov/MapClick.php?lat=33.37110&lon=-104.529&unit=0&lg=english&FcstType=dwml"
def get_forecast():
        soup = BeautifulSoup(urllib2.urlopen(xmlurl))
        temps = soup.find_all("temperature")

        maxtemps = str(temps[0])
        maxlist = maxtemps.split('\n')
        maxvalue= str(maxlist[2]).lstrip()
        maxvalue = maxvalue.replace('<value>','')
        maxvalue = maxvalue.replace('</value>','')

        mintemps = str(temps[1])
        minlist = mintemps.split('\n')
        minvalue= str(minlist[2]).lstrip()
        minvalue = minvalue.replace('<value>','')
        minvalue = minvalue.replace('</value>','')

        print maxvalue
        print minvalue

if __name__ == '__main__':
        get_forecast()
从bs4导入美化组
xmlurl=”http://forecast.weather.gov/MapClick.php?lat=33.37110&lon=-104.529&unit=0&lg=english&FcstType=dwml“
def get_forecast():
soup=BeautifulSoup(urlib2.urlopen(xmlurl))
temps=汤。查找所有(“温度”)
maxtemps=str(temps[0])
maxlist=maxtemps.split('\n')
maxvalue=str(maxlist[2]).lstrip()
maxvalue=maxvalue.replace(“”,“”)
maxvalue=maxvalue.replace(“”,“”)
mintemps=str(temps[1])
minlist=mintemps.split('\n')
minvalue=str(minlist[2]).lstrip()
minvalue=minvalue.replace(“”,“”)
minvalue=minvalue.replace(“”,“”)
打印最大值
打印最小值
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
get_forecast()
temps作为可寻址列表返回:

[<temperature time-layout="k-p24h-n7-1" type="maximum" units="Fahrenheit">
      <name>Daily Maximum Temperature</name>
        <value>65</value>
        <value>75</value>
        <value>88</value>
        <value>92</value>
        <value>92</value>
        <value>89</value>
        <value>83</value>
    </temperature>, <temperature time-layout="k-p24h-n6-2" type="minimum" units="Fahrenheit">
      <name>Daily Minimum Temperature</name>
        <value>38</value>
        <value>47</value>
        <value>53</value>
        <value>55</value>
        <value>56</value>
        <value>56</value>
    </temperature>, <temperature time-layout="k-p1h-n1-1" type="apparent" units="Fahrenheit">   <value>53</value>       </temperature>]
[
每天最高温度
65
75
88
92
92
89
83
, 
日最低气温
38
47
53
55
56
56
,    53       ]
然后我继续操纵它(很差),直到我击败它屈服

我已经阅读了太多关于Python和BeautifulSoup的文档,我看不清楚。我相信BS4可能可以做到这一点,但我对XML的处理还不足以使语法正确


我想要的是第一个每日最高温度(65)和第一个最低温度(38)

我相信你不是在过度使用,而是在过度思考你的方法。请参阅以下代码:

代码:

from bs4 import BeautifulSoup as bsoup

xml = """[<temperature time-layout="k-p24h-n7-1" type="maximum" units="Fahrenheit">
      <name>Daily Maximum Temperature</name>
        <value>65</value>
        <value>75</value>
        <value>88</value>
        <value>92</value>
        <value>92</value>
        <value>89</value>
        <value>83</value>
    </temperature>, <temperature time-layout="k-p24h-n6-2" type="minimum" units="Fahrenheit">
      <name>Daily Minimum Temperature</name>
        <value>38</value>
        <value>47</value>
        <value>53</value>
        <value>55</value>
        <value>56</value>
        <value>56</value>
    </temperature>, <temperature time-layout="k-p1h-n1-1" type="apparent" units="Fahrenheit">   <value>53</value>       </temperature>]"""

soup = bsoup(xml)
temps = soup.find_all("temperature")
max_temp = temps[0].find_all("value")[0].get_text()
print "Max temp: ", max_temp
min_temp = temps[1].find_all("value")[0].get_text()
print "Min temp: ", min_temp
Max temp:  65
Min temp:  38
[Finished in 0.6s]
你说你只需要第一个最低和最高温度,对吗?我们的做法是先做汤。接下来,我们在汤中搜索
温度
标签。我们找到两个,一个是最大值,一个是最小值

第三步——找到每一步的第一步——是相同的。首先,我们使用
temps[0]
获得第一个
temperature
标记。然后我们找到带有
值的所有元素。第一个元素由
[0]
索引返回
get_text()
只是获取元素的内部文本。要获得第一个最低温度,我们只需将
temps[0]
更改为
temps[1]
即可访问第二个
temperature
标记


让我们知道这是否有用。

太好了。这是有道理的。因为临时工就是汤,所以找到所有的并让文字工作。。。。。非常感谢。我知道我做得太过分了,应该很容易。10行丑陋的代码减少到两行,我可以轻松地用1-5的值解析接下来的5天!实际上,
temps
只是汤中的一个元素。但是,只要不使用类似于
.get_text()
的东西,您在汤中找到的任何元素都可以单独作为汤使用。想一想多重
find\u all
s就像喝汤,直到只剩下你想要的那几块。:)嗯,它白天工作。晚上,他们颠倒xml中的顺序,使最小值在最大值之前打印。我假设我应该能够在(type=“xxx”)上进行筛选,但我找不到正确的语法,因此如何验证temps[0]实际上是最大值?maxtemps=temps.find_all(“最大”)?找到了!!!min=soup.find_all(type=“minimum”)只返回最小值,而不是两个集合,因此我可以专门从中提取。我想在学习BS4之前,我需要更多地学习XML@克里斯托弗·蒙纳德:嘿,很抱歉回复晚了。由于
类型
是唯一标识符,因此可以使用简单的
min=soup.find(type=“minimum”)
,这样就不必在其上使用
[0]
。另外,尽管
BS4
可以解析XML,但最好的解析库仍然是
lxml
。这是值得深思的祝你好运