豆瓣电影top250数据分析

  • 数据来源(豆瓣电影top250)
  • 爬虫代码比较简单
  • 数据较为真实,可以进行初步的数据分析
  • 可以将前面的几篇文章中的介绍的数据预处理的方法进行实践
  • 最后用matplotlib与pyecharts两种可视化包进行部分数据展示
  • 数据仍需深挖,有待加强
  1. #首先按照惯例导入python 数据分析的两个包
  2. import pandas as pd
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from pyecharts import Bar
  1. names=['num','title',"director","role","init_year","area","genre","rating_num","comment_num","comment","url"]
  2. #"num#title#director#role#init_year#area#genre#rating_num#comment_num#comment#url"
  3. df_1 = pd.read_excel("top250_f1.xls",index=None,header=None)
  4. df_1.columns=names
  5. df_1.head()

  1. df_1.dtypes
  1. num int64
  2. title object
  3. director object
  4. role object
  5. init_year object
  6. area object
  7. genre object
  8. rating_num float64
  9. comment_num int64
  10. comment object
  11. url object
  12. dtype: object
  1. names1=["num","rank","alt_title","title","pubdate","language","writer","director","cast","movie_duration","year","movie_type","tags","image"]
  2. df_2 = pd.read_excel("top250_f2.xlsx",index=None,header=None)
  3. df_2.columns=names1
  4. df_2.info()
  1. <class 'pandas.core.frame.DataFrame'>
  2. RangeIndex: 250 entries, 0 to 249
  3. Data columns (total 14 columns):
  4. num 250 non-null int64
  5. rank 250 non-null float64
  6. alt_title 250 non-null object
  7. title 250 non-null object
  8. pubdate 250 non-null object
  9. language 250 non-null object
  10. writer 250 non-null object
  11. director 250 non-null object
  12. cast 250 non-null object
  13. movie_duration 250 non-null object
  14. year 250 non-null object
  15. movie_type 250 non-null object
  16. tags 250 non-null object
  17. image 250 non-null object
  18. dtypes: float64(1), int64(1), object(12)
  19. memory usage: 27.4+ KB
  1. df_1_cut = df_1[['num','title','init_year','area','genre','rating_num','comment_num']]
  2. df_2_cut = df_2[['num','language','director','cast','movie_duration','tags']]
  3. df = pd.merge(df_1_cut,df_2_cut,how = 'outer',on = 'num') #外连接,合并标准on = 'num'
  4. # df.to_excel("all_data_movie.xls",index=False) #查看前五条信息
  1. # 查看重复数据
  2. df.duplicated()
  3. df.duplicated().value_counts()
  1. False 250
  2. dtype: int64
  1. df.title.unique()
  1. array(['肖申克的救赎', '霸王别姬', '这个杀手不太冷', '阿甘正传', '美丽人生', '泰坦尼克号', '千与千寻',
  2. '辛德勒的名单', '盗梦空间', '机器人总动员', '三傻大闹宝莱坞', '忠犬八公的故事', '海上钢琴师', '放牛班的春天',
  3. '大话西游之大圣娶亲', '楚门的世界', '教父', '龙猫', '星际穿越', '熔炉', '触不可及', '无间道',
  4. '乱世佳人', '当幸福来敲门', '怦然心动', '天堂电影院', '十二怒汉', '鬼子来了', '蝙蝠侠:黑暗骑士',
  5. '疯狂动物城', '少年派的奇幻漂流', '活着', '搏击俱乐部', '指环王3:王者无敌', '天空之城',
  6. '大话西游之月光宝盒', '飞屋环游记', '罗马假日', '控方证人', '窃听风暴', '两杆大烟枪', '飞越疯人院',
  7. '闻香识女人', '哈尔的移动城堡', '辩护人', '海豚湾', 'V字仇杀队', '死亡诗社', '摔跤吧!爸爸', '教父2',
  8. '指环王2:双塔奇兵', '美丽心灵', '指环王1:魔戒再现', '饮食男女', '情书', '美国往事', '狮子王', '素媛',
  9. '钢琴家', '小鞋子', '七宗罪', '天使爱美丽', '被嫌弃的松子的一生', '致命魔术', '本杰明·巴顿奇事',
  10. '音乐之声', '西西里的美丽传说', '勇敢的心', '拯救大兵瑞恩', '黑客帝国', '低俗小说', '剪刀手爱德华',
  11. '让子弹飞', '看不见的客人', '沉默的羔羊', '蝴蝶效应', '入殓师', '大闹天宫', '春光乍泄', '末代皇帝',
  12. '心灵捕手', '玛丽和马克思', '阳光灿烂的日子', '哈利·波特与魔法石', '布达佩斯大饭店', '幽灵公主', '第六感',
  13. '禁闭岛', '重庆森林', '猫鼠游戏', '狩猎', '致命ID', '大鱼', '断背山', '甜蜜蜜',
  14. '射雕英雄传之东成西就', '告白', '一一', '加勒比海盗', '穿条纹睡衣的男孩', '阳光姐妹淘', '摩登时代',
  15. '阿凡达', '上帝之城', '爱在黎明破晓前', '消失的爱人', '风之谷', '爱在日落黄昏时', '侧耳倾听', '超脱',
  16. '倩女幽魂', '恐怖直播', '红辣椒', '小森林 夏秋篇', '喜剧之王', '菊次郎的夏天', '驯龙高手', '幸福终点站',
  17. '萤火虫之墓', '借东西的小人阿莉埃蒂', '岁月神偷', '神偷奶爸', '七武士', '杀人回忆', '贫民窟的百万富翁',
  18. '电锯惊魂', '喜宴', '谍影重重3', '真爱至上', '怪兽电力公司', '东邪西毒', '记忆碎片', '海洋',
  19. '黑天鹅', '雨人', '疯狂原始人', '卢旺达饭店', '小森林 冬春篇', '英雄本色', '哈利·波特与死亡圣器(下)',
  20. '燃情岁月', '7号房的礼物', '虎口脱险', '心迷宫', '萤火之森', '傲慢与偏见', '荒蛮故事', '海边的曼彻斯特',
  21. '请以你的名字呼唤我', '教父3', '恋恋笔记本', '完美的世界', '纵横四海', '花样年华', '唐伯虎点秋香',
  22. '超能陆战队', '玩具总动员3', '蝙蝠侠:黑暗骑士崛起', '时空恋旅人', '魂断蓝桥', '猜火车', '穿越时空的少女',
  23. '雨中曲', '二十二', '达拉斯买家俱乐部', '我是山姆', '人工智能', '冰川时代', '浪潮', '朗读者',
  24. '爆裂鼓手', '香水', '罗生门', '未麻的部屋', '阿飞正传', '血战钢锯岭', '一次别离', '被解救的姜戈',
  25. '可可西里', '追随', '恐怖游轮', '撞车', '战争之王', '头脑特工队', '地球上的星星', '房间', '无人知晓',
  26. '梦之安魂曲', '牯岭街少年杀人事件', '魔女宅急便', '谍影重重', '谍影重重2', '忠犬八公物语', '模仿游戏',
  27. '你的名字。', '惊魂记', '青蛇', '一个叫欧维的男人决定去死', '再次出发之纽约遇见你', '哪吒闹海', '完美陌生人',
  28. '东京物语', '小萝莉的猴神大叔', '黑客帝国3:矩阵革命', '源代码', '新龙门客栈', '终结者2:审判日',
  29. '末路狂花', '碧海蓝天', '秒速5厘米', '绿里奇迹', '这个男人来自地球', '海盗电台', '勇闯夺命岛',
  30. '城市之光', '初恋这件小事', '无耻混蛋', '卡萨布兰卡', '变脸', 'E.T. 外星人', '爱在午夜降临前',
  31. '发条橙', '步履不停', '黄金三镖客', '无敌破坏王', '疯狂的石头', '美国丽人', '荒野生存', '迁徙的鸟',
  32. '英国病人', '海街日记', '彗星来的那一夜', '国王的演讲', '非常嫌疑犯', '血钻', '燕尾蝶', '聚焦',
  33. '勇士', '叫我第一名', '穆赫兰道', '遗愿清单', '枪火', '上帝也疯狂', '我爱你', '黑鹰坠落', '荒岛余生',
  34. '大卫·戈尔的一生', '千钧一发', '蓝色大门', '2001太空漫游'], dtype=object)
  1. # 数据格式的初步清洗
  2. df['genre']=df['genre'].str[2:-2]
  3. df["language"]= df['language'].str[2:-2]
  4. df["director"]= df['director'].str[2:-2]
  5. df["cast"]= df['cast'].str[2:-2]
  6. df["movie_duration"]= df['movie_duration'].str[2:-2]
  7. # df[["genre","language","director","cast","movie_duration"]]=df[["genre","language","director","cast","movie_duration"]].apply(lambda x: x.replace("['","").replace("']",""))
  1. # 地区的数据清理
  2. area_split = df['area'].str.split(expand=True)
  3. area_split.head()
  4. all_area = area_split.apply(pd.value_counts).fillna(0)
  5. all_area.columns = ['area_1','area_2','area_3','area_4','area_5']
  6. all_area = all_area.astype("int")
  7. all_area.dtypes
  1. area_1 int32
  2. area_2 int32
  3. area_3 int32
  4. area_4 int32
  5. area_5 int32
  6. dtype: object
  1. all_area.head()

  1. all_area['Col_sum'] = all_area.apply(lambda x: x.sum(), axis=1)
  1. all_area.head()

  1. categories = df['genre'].str.split(" ",expand=True)
  2. categories = categories.apply(pd.value_counts).fillna(0).astype("int")
  3. categories.head()

  1. categories['count']= categories.apply(lambda x:x.sum(),axis=1)
  2. categories.sort_values('count',ascending=False)
  3. categories.head()

  1. # 对于language处理
  2. df['language'].head(10)
  1. 0 英语
  2. 1 汉语普通话
  3. 2 英语', '意大利语', '法语
  4. 3 英语
  5. 4 意大利语', '德语', '英语
  6. 5 英语', '意大利语', '德语', '俄语
  7. 6 日语
  8. 7 英语', '希伯来语', '德语', '波兰语
  9. 8 英语', '日语', '法语
  10. 9 英语
  11. Name: language, dtype: object
  1. language_all = df['language'].str.replace("\', \'"," ").str.split(" ",expand=True)
  2. language_all.head()

  1. language_all = language_all.apply(pd.value_counts).fillna(0).astype("int")
  2. language_all.head()

  1. language_all['count']= language_all.apply(lambda x:x.sum(),axis=1)
  2. language_all.sort_values('count',ascending=False)
  3. language_all.head()

  1. df.director.head()
  1. 0 弗兰克·德拉邦特 Frank Darabont
  2. 1 陈凯歌 Kaige Chen
  3. 2 吕克·贝松 Luc Besson
  4. 3 Robert Zemeckis
  5. 4 罗伯托·贝尼尼 Roberto Benigni
  6. Name: director, dtype: object
  1. director_all = df['director'].str.replace("\', \'","~").str.split("~",expand=True)
  2. director_all.head()

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

  1. .dataframe tbody tr th {
  2. vertical-align: top;
  3. }
  4. .dataframe thead th {
  5. text-align: right;
  6. }
0 1 2
0 弗兰克·德拉邦特 Frank Darabont None None
1 陈凯歌 Kaige Chen None None
2 吕克·贝松 Luc Besson None None
3 Robert Zemeckis None None
4 罗伯托·贝尼尼 Roberto Benigni None None
  1. # 演员
  2. df['cast'].head()
  1. 0 蒂姆·罗宾斯 Tim Robbins', '摩根·弗里曼 Morgan Freeman', ...
  2. 1 张国荣 Leslie Cheung', '张丰毅 Fengyi Zhang', '巩俐 Li...
  3. 2 让·雷诺 Jean Reno', '娜塔莉·波特曼 Natalie Portman', '加...
  4. 3 Tom Hanks', 'Robin Wright Penn', 'Gary Sinise'...
  5. 4 罗伯托·贝尼尼 Roberto Benigni', '尼可莱塔·布拉斯基 Nicoletta...
  6. Name: cast, dtype: object
  1. cast_all = df['cast'].str.replace("\', \'","~").str.split("~",expand=True)
  2. cast_all.head(2)

  1. main_dr= list(director_all[0])
  2. second_dr= list(director_all[1])
  3. thrid_dr= list(director_all[2])
  4. directors=pd.Series(main_dr+second_dr+thrid_dr)
  5. directors.value_counts().head()
  1. 宫崎骏 Hayao Miyazaki 7
  2. 克里斯托弗·诺兰 Christopher Nolan 7
  3. 王家卫 Kar Wai Wong 5
  4. 史蒂文·斯皮尔伯格 Steven Spielberg 5
  5. 大卫·芬奇 David Fincher 4
  6. dtype: int64
  1. df['init_year'].head()
  1. 0 1994
  2. 1 1993
  3. 2 1994
  4. 3 1994
  5. 4 1997
  6. Name: init_year, dtype: object
  1. year_= df['init_year'].str.split('/').apply(lambda x:x[0].strip()).replace(regex={'\(中国大陆\)':''})
  2. year_split = pd.to_datetime(year_).dt.year
  3. year_split.head()
  1. 0 1994
  2. 1 1993
  3. 2 1994
  4. 3 1994
  5. 4 1997
  6. Name: init_year, dtype: int64
  1. df['movie_duration'].head()
  1. 0 142分钟
  2. 1 171 分钟
  3. 2 110分钟(剧场版)', '133分钟(国际版)
  4. 3 142 分钟
  5. 4 116分钟', '125分钟(加长版)
  6. Name: movie_duration, dtype: object
  1. # 观影时间
  2. movie_duration_split = df['movie_duration'].str.replace("\', \'","~").str.split("~",expand=True).fillna(0)
  3. movie_duration_split =movie_duration_split.replace(regex={'分钟.*': ''})
  4. df['movie_duration']=movie_duration_split[0].astype("int")
  5. df['movie_duration'].head()
  1. 0 142
  2. 1 171
  3. 2 110
  4. 3 142
  5. 4 116
  6. Name: movie_duration, dtype: int32
  1. # 标签 tags
  2. # 查看第一部电影的的tag
  3. # pd.DataFrame(eval(df['tags'][0]))
  4. df['tags'][0]
  1. "[{'count': 220591, 'name': '经典'}, {'count': 191014, 'name': '励志'}, {'count': 173587, 'name': '信念'}, {'count': 159939, 'name': '自由'}, {'count': 115024, 'name': '人性'}, {'count': 111430, 'name': '美国'}, {'count': 93721, 'name': '人生'}, {'count': 72602, 'name': '剧情'}]"

此处使用eval方法将以字符串形式保存的列表转化为列表,进而使用列表的方法进行处理该字段,使用字符串的处理过于繁琐(正则匹配)

  • 交错合并两列表元素,此处使用的是itertools中的chain.from_iterable 函数,将两个列表的元素使用zip组成生成器,然后将两个列表元素交叉合并组成新的一个大的列表
  1. all_tags = [ pd.DataFrame(eval(i)) for i in df["tags"]]
  2. import itertools
  3. all_tags=[list(itertools.chain.from_iterable(zip(df_['name'],df_['count']))) for df_ in all_tags]
  4. all_tags_df=pd.DataFrame(all_tags)
  5. all_tags_df.head()

  1. # 数据分析与可视化部分 matplotlib 与 pyecharts
  2. import matplotlib.pyplot as plt
  3. import matplotlib
  4. from pyecharts import Bar
  5. import seaborn as sns
  6. matplotlib.rcParams["font.family"]=["simsunb"]
  7. matplotlib.rcParams['font.size'] =15
  1. plt.figure(figsize=(15,6))
  2. plt.style.use('seaborn-whitegrid')
  3. plt.subplot(1,2,1)
  4. plt.scatter(df['rating_num'],df['num'])
  5. plt.xlabel("reating_num")
  6. plt.ylabel("ranking")
  7. plt.gca().invert_yaxis()
  8. plt.subplot(1,2,2)
  9. plt.hist(df['rating_num'],bins=12)
  10. plt.xlabel("rating_num")
  11. plt.show()

  1. plt.figure(1)
  2. plt.figure(figsize=(15,6))
  3. plt.style.use('seaborn-whitegrid')
  4. plt.subplot(1,2,1)
  5. plt.scatter(df['movie_duration'],df['num'])
  6. plt.xlabel("movie_duration")
  7. plt.ylabel("ranking")
  8. plt.gca().invert_yaxis()
  9. plt.subplot(1,2,2)
  10. plt.hist(df['movie_duration'],bins=15)
  11. plt.xlabel("movie_duration")
  12. plt.show()

  1. # 观影时长与 电影排名之间的相关性,从常识来判断,基本没有啥关系,因为好的电影不一定时间长,时间长的不一定是好电影
  2. df['num'].corr(df['movie_duration'])
  1. -0.19979596696001942
  1. df['init_year']=year_split
  2. plt.figure(1)
  3. plt.figure(figsize=(15,6))
  4. plt.style.use('seaborn-whitegrid')
  5. plt.subplot(1,2,1)
  6. plt.scatter(df['init_year'],df['num'])
  7. plt.xlabel("init_year")
  8. plt.ylabel("ranking")
  9. plt.gca().invert_yaxis()
  10. plt.subplot(1,2,2)
  11. plt.hist(df['init_year'],bins=30)
  12. plt.xlabel("init_year")
  13. plt.show()

  1. df['num'].corr(df['init_year'])
  2. # 从结果来看,更没有什么相关性
  1. 0.041157240822869007
  1. # import matplotlib.font_manager as fm
  2. # fpath = 'C:\\Windows\\Fonts\\simsunb.ttf'
  3. # prop=fm.FontProperties(fname=fpath)
  4. # print(prop)
  5. matplotlib.rcParams["font.family"]=["SimHei"]
  6. plt.figure(figsize=(24,6))
  7. all_area_new = all_area['Col_sum'].sort_values(ascending=False)
  8. plt.bar(list(all_area_new.index),list(all_area_new))
  9. plt.xticks(rotation=45) #坐标轴刻度倾斜45°
  10. plt.legend(labels=["count"],loc='upper center')
  11. plt.show()

  1. language_all['count'].sort_values(ascending=False).head()
  1. 英语 170
  2. 法语 40
  3. 日语 40
  4. 汉语普通话 34
  5. 德语 24
  6. Name: count, dtype: int64
  1. language_all['count'].sort_values(ascending=False).plot(kind='bar',figsize=(22,6))
  2. plt.legend(labels=["language_count"],loc='upper center')
  3. plt.show()

  1. categories["count"].sort_values(ascending=False).plot(kind='bar',figsize=(22,6))
  2. plt.legend(labels=["category_count"],loc='upper center')
  3. plt.show()

  1. all_tag_name = all_tags_df.loc[:,[0,2,4,6,8,10,12,14]].values.flatten()
  2. # 此处的flatten就是使用numpy中的将多维数组降为一维数组,与评论中的代码意思一致
  3. all_tag_name = pd.Series(all_tag_name).value_counts()

  1. from pyecharts import WordCloud
  2. wordcloud = WordCloud(width=1000,height=600)
  3. wordcloud.add("",list(all_tag_name.index),list(all_tag_name.values),word_size_range=[20,100])
  4. # 可以直接使用all_tag_name.index,all_tag_name.values,可以不转化为list
  5. wordcloud

  1. from wordcloud import WordCloud
  2. font = r'C:\Windows\Fonts\simfang.ttf'
  3. wordcloud = WordCloud(font_path=font,max_font_size = 35).generate(str(list(all_tag_name.index)))
  4. plt.figure(figsize=(9,6))
  5. plt.imshow(wordcloud)
  6. plt.axis('off')
  7. plt.show()

  1. from pyecharts import Bar
  2. mybar= Bar("电影类型分析")
  3. cate=categories['count'].sort_values(ascending=False)
  4. mybar.add("电影类型",cate.index,cate.values,mark_line=['max'],mark_point=['average'])
  5. mybar

  1. from pyecharts import Pie
  2. Top30_rating_num=df[['rating_num','title']].sort_values(['rating_num'],ascending=False).head(30)['rating_num'].value_counts()
  3. Top30_rating_num
  4. pie = Pie('排名前30电影评分占比',title_pos = 'center')
  5. pie.add('',list(Top30_rating_num.index),Top30_rating_num.values,is_label_show = True,legend_orient = 'vertical',legend_pos = 'right')
  6. pie

python pandas 豆瓣电影 top250 数据分析的更多相关文章

  1. python爬虫: 豆瓣电影top250数据分析

    转载博客 https://segmentfault.com/a/1190000005920679 根据自己的环境修改并配置mysql数据库 系统:Mac OS X 10.11 python 2.7 m ...

  2. [Python]计算豆瓣电影TOP250的平均得分

    用python写的爬虫练习,感觉比golang要好写一点. import re import urllib origin_url = 'https://movie.douban.com/top250? ...

  3. 【转】爬取豆瓣电影top250提取电影分类进行数据分析

    一.爬取网页,获取需要内容 我们今天要爬取的是豆瓣电影top250页面如下所示: 我们需要的是里面的电影分类,通过查看源代码观察可以分析出我们需要的东西.直接进入主题吧! 知道我们需要的内容在哪里了, ...

  4. Python:python抓取豆瓣电影top250

    一直对爬虫感兴趣,学了python后正好看到某篇关于爬取的文章,就心血来潮实战一把吧. 实现目标:抓取豆瓣电影top250,并输出到文件中 1.找到对应的url:https://movie.douba ...

  5. Python小爬虫——抓取豆瓣电影Top250数据

    python抓取豆瓣电影Top250数据 1.豆瓣地址:https://movie.douban.com/top250?start=25&filter= 2.主要流程是抓取该网址下的Top25 ...

  6. python爬虫 Scrapy2-- 爬取豆瓣电影TOP250

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  7. Python爬虫----抓取豆瓣电影Top250

    有了上次利用python爬虫抓取糗事百科的经验,这次自己动手写了个爬虫抓取豆瓣电影Top250的简要信息. 1.观察url 首先观察一下网址的结构 http://movie.douban.com/to ...

  8. [Python] 豆瓣电影top250爬虫

    1.分析 <li><div class="item">电影信息</div></li> 每个电影信息都是同样的格式,毕竟在服务器端是用 ...

  9. Python抓取豆瓣电影top250!

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:404notfound  一直对爬虫感兴趣,学了python后正好看到 ...

随机推荐

  1. 基金、社保和QFII等机构的重仓股排名评测

    来源:基金前20大重仓股持仓股排名 基金前15大重仓股持仓股排名 基金重仓前15大个股,相较于同期沪深300的平均收益,近1月:-1.05%,近3月:-0.49%,近6月:1.45%,近1年:3.92 ...

  2. linux 中搜索命令的对比

    1.find find是最常用和最强大的查找命令.它能做到实时查找,精确查找,但速度慢. find的使用格式如下: #find [指定目录] [指定条件] [指定动作] 指定目录:是指所要搜索的目录和 ...

  3. java okhttp发送post请求

    java的httpclient和okhttp请求网络,构造一个基本的post get请求,都比py的requests步骤多很多,也比py的自带包urllib麻烦些. 先封装成get post工具类,工 ...

  4. feed流拉取,读扩散,究竟是啥?

    from:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651961214&idx=1&sn=5e80ad6f2 ...

  5. MySQL---insert into select from

    INSERT INTO perf_week(node_id,perf_time,pm25,pm10,temp,humi) SELECT node_id,'2016-12-22 11:55:00' AS ...

  6. backbone学习笔记:模型(Model)(1)基础知识

    backbone为复杂Javascript应用程序提供MVC(Model View Controller)框架,框架里最基本的是Model(模型),它用来处理数据,对数据进行验证,完成后台数据与前台数 ...

  7. php-fpm 配置进程池

    什么是 php-fpm :php 是作为一个独立服务存在的,这个服务叫做 php-fpm什么是 php-fpm pool :也就是 php-fpm 的进程池,这个进程池中运行了多个子进程,用来并发处理 ...

  8. Splash runjs() 方法

    runjs() 方法可以执行 JavaScript 代码,它与 evaljs() 功能类似,但是更偏向于执行某些动作或声明某些方法 function main(splash, args) splash ...

  9. [JS] 如何自定义字符串格式化输出

    在其他语言中十分常见的字符串格式化输出,居然在 Javascript 中不见踪影,于是决定自己实现该方法,以下就是个人编写的最简洁实现: String.prototype.format = funct ...

  10. html主要笔记

    1.用title属性作为工具提示 2.链接到锚点 <a href="http://wickedlysmart.com/buzz#Coffee"> 3.<em> ...