一键查询明星个人信息,并以知识图谱可视化展示

1

前言

最近想搞一点好玩的事情(技术),今天打算做一个小程序:一键查询明星个人信息。(从 数据抓取知识图谱展示,全程代码完成原创,不涉及调用api包)

思路:从爬取网页数据(某度百科),进行数据处理,最后通过知识图谱图进行展示。

最后会将代码开源出来: 获取方式在下方

下面先看演示:

图片版

一键查询明星个人信息,并以知识图谱可视化展示

动图版

一键查询明星个人信息,并以知识图谱可视化展示

2

采集数据

1.分析链接

一键查询明星个人信息,并以知识图谱可视化展示
https://baike.baidu.com/item/刘德华/114923?fr=aladdin

链接上中有 两个参数

  1. 明星名字:刘德华
  2. 编号:114923

编号是通过另外一个链接获取(我们希望是直接输入明星名字就可以获取网页),因此我们需要去根据明星获取编号!

2.获取编号

url="https://baike.baidu.com/search/word?word=刘德华"
s = requests.Session()
response = s.get(url, headers=headers)
text = response.text

一键查询明星个人信息,并以知识图谱可视化展示

可以看到这个链接中获取的数据包含 编号

t_split = text.split('id="J-vars" data-lemmaid="')[1].split('" data-lemmatitle="')[0]
print(text)

这样就可以获取到编号(根据明星名称就可以获取到编号)

3.解析网页数据

一键查询明星个人信息,并以知识图谱可视化展示

F12查看网页源代码,可以看到左边信息在class=basicInfo-block basicInfo-left,右边的信息在class=basicInfo-block basicInfo-right

其中属性在dt标签,值在dd标签。

basicInfo_left = selector.xpath('//*[@class="basicInfo-block basicInfo-left"]')[0]
dt.append(basicInfo_left.xpath('.//dt'))
dd.append(basicInfo_left.xpath('.//dd'))

basicInfo_right = selector.xpath('//*[@class="basicInfo-block basicInfo-right"]')[0]
dt.append(basicInfo_right.xpath('.//dt'))
dd.append(basicInfo_right.xpath('.//dd'))

代码部分:

url="https://baike.baidu.com/item/刘德华/114923?fr=aladdin"
res = requests.get(url,headers=headers)
res.encoding = 'utf-8'
text = res.text
selector = etree.HTML(text)
#属性
key = []
#值
value = []

dt =[]
dd =[]
basicInfo_left = selector.xpath('//*[@class="basicInfo-block basicInfo-left"]')[0]
dt.append(basicInfo_left.xpath('.//dt'))
dd.append(basicInfo_left.xpath('.//dd'))

basicInfo_right = selector.xpath('//*[@class="basicInfo-block basicInfo-right"]')[0]
dt.append(basicInfo_right.xpath('.//dt'))
dd.append(basicInfo_right.xpath('.//dd'))

for j in dt:
    for i in j:
        text = i.xpath('.//text()')
        if len(text)==1:
            text = text[0].replace(" ","").replace("\n","").replace("\xa0","")
        else:
            text = "-".join(text)
            text = text.replace(" ", "").replace("\n", "").replace("\xa0", "")
        key.append(text)
for j in dd:
    for i in j:
        text = i.xpath('.//text()')
        if len(text) == 1:
            text = text[0].replace(" ", "").replace("\n", "").replace("\xa0", "")
        else:
            text = "-".join(text)
            text = text.replace(" ", "").replace("\n", "").replace("\xa0", "").replace("-", " ")
        value.append(text)

for k in range(0,len(key)):
    print(key[k]+":"+value[k])

一键查询明星个人信息,并以知识图谱可视化展示

3

处理数据

1.换行处理

爬取的文本中含有 \xa0、换行 \n空格等,需要进行处理

text = i.xpath('.//text()')
if len(text)==1:
    text = text[0].replace(" ","").replace("\n","").replace("\xa0","")
else:
    text = "-".join(text)
    text = text.replace(" ", "").replace("\n", "").replace("\xa0", "")

2.多值处理

一键查询明星个人信息,并以知识图谱可视化展示

代表作品主要成就这些有很多值,为了方便 绘制知识图谱图,保留其中一个值就可以。

if key[k]=="代表作品"  or key[k]=="主要成就":
    v = value[k].split(" ")
    dict = {'source': str(name_i), 'target': str(v[0]+v[1]), 'rela': str(key[k]), 'type': 'resolved'}
    links.append(dict)
else:
    dict= {'source': str(name_i), 'target': str(value[k]), 'rela': str(key[k]), 'type': 'resolved'}
    links.append(dict)

3.数据格式处理

一键查询明星个人信息,并以知识图谱可视化展示

这个是知识图谱要求数据格式

source表示明星,比如刘德华

target表示value,比如中国

rela表示key,比如国籍

for k in range(0,len(key)):
    if key[k]=="代表作品"  or key[k]=="主要成就":
        v = value[k].split(" ")
        dict = {'source': str(name_i), 'target': str(v[0]+v[1]), 'rela': str(key[k]), 'type': 'resolved'}
        links.append(dict)
    else:
        dict= {'source': str(name_i), 'target': str(value[k]), 'rela': str(key[k]), 'type': 'resolved'}
        links.append(dict)

4

绘制知识图

1.后端部分

这里通过Flask框架来制作网页展示

#获取数据
@app.route('/getdata')
def getdata():
    name_i = request.args.get('name')
    # 采集数据
    links = getlist(name_i)

    #return Response(json.dumps(links), mimetype='application/json')
    return render_template('index.html', linkss=json.dumps(links))

if __name__ == "__main__":    
    """初始化"""

    app.run(host=''+ip, port=5000,threaded=True)

其中的getlist,是爬虫代码封装的函数( 完整代码下方获取

用户访问一下链接,并传过来明星的名字

http://localhost:5000/getdata?name=刘德华

flask就调用爬虫程序getlist,获取到数据,然后携带数据linkss跳转到index.html,展示数据。

2.网页部分

var links=eval('{{linkss|safe }}');
var nodes = {};
links.forEach(function(link)
{
  link.source = nodes[link.source] || (nodes[link.source] = {name: link.source});
  link.target = nodes[link.target] || (nodes[link.target] = {name: link.target});
});

links接收到数据后,在进行forEach取出进行展示。

这里就只贴了修改改动的部分代码,其他的都是不需要改动,完整的html可以在 下方获取

3.效果

一键查询明星个人信息,并以知识图谱可视化展示

一键查询明星个人信息,并以知识图谱可视化展示

5

总结

一键查询明星个人信息,并以知识图谱可视化展示

一键查询明星个人信息,并以知识图谱可视化展示

1.教大家如何爬取某度百科,其中 难点就是如何获取编号!

2.对爬取的数据进行相应的处理和格式转化!

3.Flask的简单使用( 小白入门非常适用)。

4.可视化方面,如何 制作知识结构图(知识图谱).

8.

5.本文全是干货(涉及爬虫、数据处理、Flask网页、知识结构图的绘制), 推荐收藏!!!

如果大家对本文代码源码感兴趣,扫码关注『 Python爬虫数据分析挖掘』后台回复: 明星可视化 ,获取完整代码!

一键查询明星个人信息,并以知识图谱可视化展示

————- 推荐阅读 ————-

爬虫入门篇

  1. 今天只分享python、爬虫入门级学习资料
  2. 以某乎为实战案例,教你用Python爬取手机App数据
  3. 教你用python爬取『京东』商品数据,原来这么简单!
  4. 以『赘婿』为实战案例,手把手教会你用python爬取『爱奇艺』视频弹幕
  5. python爬取44130条用户观影数据,分析挖掘用户与电影之间的隐藏信息!
  6. 基金这么赚钱!!编程实现基金从采集到分析通用模板!(白酒为例)
  7. 我爬取了爬虫岗位薪资,分析后发现爬虫真香
  8. 竟然如此简单!输入明星名字就可以直接爬取高清图片
  9. pyhton爬取爱豆(李易峰)微博评论(附源码)
  10. 快手解析视频真实链接(爬取快手视频)

爬虫框架篇

  1. 以『B站』为实战案例!手把手教你掌握爬虫必备框架『Scrapy』
  1. 爬取1907条『课程学习』数据,分析哪类学习资源最受大学生青睐

爬虫反爬篇

  1. 爬虫遇到反爬机制怎么办? 看看我是如何解决的!
  2. python实战破解『梨视频』反爬机制,轻松实现批量视频下载!
  3. 『异步反爬』别再说自己不会爬取『抖音』视频了!

可视化篇

  1. 爬取3w条『各种品牌』笔记本电脑数据,统计分析并进行可视化展示!真好看~
  2. python爬取7w+『赘婿』弹幕,发现弹幕比剧还精彩!
  3. 爬取1907条『课程学习』数据,分析哪类学习资源最受大学生青睐
  4. python爬取各类基金数据,以『动图可视化』方式展示基金的涨跌情况
  5. python爬取『大年初一』热映电影,以『可视化及词云秀』方式带你了解热映电影
  6. python爬取淘宝全部『螺蛳粉』数据,看看你真的了解螺蛳粉吗?
  7. 爬取淘宝热卖商品并可视化分析,看看大家都喜欢买什么!
  8. 王者荣耀白晶晶皮肤1小时销量突破千万!分析网友评论我发现了原因
  9. 分析各类基金近一年『日涨幅』流水线动态图!哭了,真是跌妈不认!
  10. 分析B站《送你一朵小红花》弹幕评论
  11. 我爬取了爬虫岗位薪资,分析后发现爬虫真香
  12. python实现在线微博数据可视化

python工具篇

  1. 教你用python爬虫下载1w+『ppt模板』,再也不用付费去购买啦!
  2. python爬取下载m3u8加密视频,原来这么简单!
  3. 详细实战教程!部署Flask网站+域名访问+免费https证书
  4. 花一天时间做了一个福利资源网站!免费分享给大家
  5. python实现四种出行路线规划(公交、步行、驾车、骑行)
  6. 35行代码下载任意网页的图片
  7. python窃取摄像头照片(摄像头拍照+邮箱发送+打包exe)
  8. 30行爬虫代码实现中英互译
  9. 教你搭建一个花卉识别系统(超级简单)

一键查询明星个人信息,并以知识图谱可视化展示

Original: https://blog.csdn.net/lyc2016012170/article/details/115107436
Author: Python研究者
Title: 一键查询明星个人信息,并以知识图谱可视化展示

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/556183/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球