求助
import requests
from bs4 import BeautifulSoup
from pyecharts.charts import Bar
ALL_Data = []
def GetHTMLText(url):
try:
r = requests.get(url, timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
print("访问失败")
def ParseHTML(html):
soup = BeautifulSoup(html,“html5lib”)
info1 = soup.find(“div”,class_ = “conMidtab” )
info2 = info1.find_all(“table”)
for table in info2:
trs = table.find_all(‘tr’)[2:]
for index,tr in enumerate(trs):
tds = tr.find_all(‘td’)
city_td = tds[0]
if index == 0:
city_td = tds[1]
city = list(city_td.stripped_strings)[0]
tmp_td = tds[-2]
min_tmp = list(tmp_td.stripped_strings)[0]
ALL_Data.append({‘city’:city,‘min_tmp’:int(min_tmp)})
# print({‘city’:city,‘min_tmp’:int(min_tmp)})
def main():
urls = [
‘http://www.weather.com.cn/textFC/hb.shtml’,
‘http://www.weather.com.cn/textFC/db.shtml’,
‘http://www.weather.com.cn/textFC/hd.shtml’,
‘http://www.weather.com.cn/textFC/hz.shtml’,
‘http://www.weather.com.cn/textFC/hn.shtml’,
‘http://www.weather.com.cn/textFC/xb.shtml’,
‘http://www.weather.com.cn/textFC/xn.shtml’,
‘http://www.weather.com.cn/textFC/gat.shtml’
]
for url in urls:
html = GetHTMLText(url)
ParseHTML(html)
ALL_Data.sort(key=lambda data:data['min_tmp'])
print(ALL_Data)
data = ALL_Data[0:10]
cities = list(map(lambda x:x['city'],data))
min_temp = list(map(lambda x:x['min_tmp'],data))
chart = Bar(“中国最低气温城市TOP10”)
chart = Bar(' ')
chart.add('中国 ',cities,min_temp)
chart.render('temperature.html')
main()
为什么我直接打印数据没问题,但是在进行数据可视化时会报错AttributeError: ‘str’ object has no attribute ‘get’
求大神解答,十分感谢?