我可以缩小范围,筛选出标题,所以这是我所尝试的:
def get_avg_high_temp(*args):
url_site = get_url(*args)
#returns URL for city argument from weatherspark.com
for url in url_site:
res = requests.get(url)
soup = BeautifulSoup(res.text,"html.parser")
print(soup.find(title='Temp.'))
对一个城市运行上面的代码,得到的结果如下:
get_avg_high_temp('Calgary Canada')
<tr style="color: #333;" title="Temp.">
<td style="text-overflow: ellipsis; overflow: hidden; white-space: nowrap; max-width: 25vw;">
<span style="color: #333;">Temp.</span></td>
<td style="text-decoration: underline rgba(51,51,51,.35);">-6 °C</td><td>-5 °C</td><td>-1
°C</td><td>5 °C</td><td>10 °C</td><td>14 °C</td><td style="text-decoration: underline
rgba(51,51,51,.35);">17 °C</td><td>16 °C</td><td>11 °C</td><td>6 °C</td><td>-2 °C</td><td
style="text-decoration: underline rgba(51,51,51,.35);">-6 °C</td></tr>
我尝试了上面的代码,但得到了上面提到的HTML。我想利用“°”来获得之前的数字...但不知道如何做到这一点。
预期结果是返回摄氏数的数字
2条答案
按热度按时间0vvn1miw1#
以下方法应该有效:
另外,你获取的是平均温度,而不是平均高温。如果你想要平均高温,就像你的函数定义所说的,从“Temp.”切换到“High”。如果你想要总平均值而不是平均值列表,使用
return sum(temps) / len(temps)
。gab6jxml2#
您可以使用
stripped_strings
和split()
:或者更好地选择更具体的
css selector
:两者都使用
split()
将元素中的字符串按空格分割为数字和单位。以防万一,如果你处理表格,
pandas.read_html()
通常是一种简单的获取数据的方法。从那里你可以操作,过滤,转换和导出:示例
输出