当前位置:   article > 正文

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

艺人信息批量查询网站

1

前言

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

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

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

下面先看演示:

图片版

动图版

2

采集数据

1.分析链接

https://baike.baidu.com/item/刘德华/114923?fr=aladdin

链接上中有两个参数

  1. 明星名字:刘德华

  2. 编号:114923

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

2.获取编号

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

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

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

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

3.解析网页数据

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

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

  1. basicInfo_left = selector.xpath('//*[@class="basicInfo-block basicInfo-left"]')[0]
  2. dt.append(basicInfo_left.xpath('.//dt'))
  3. dd.append(basicInfo_left.xpath('.//dd'))
  4. basicInfo_right = selector.xpath('//*[@class="basicInfo-block basicInfo-right"]')[0]
  5. dt.append(basicInfo_right.xpath('.//dt'))
  6. dd.append(basicInfo_right.xpath('.//dd'))

代码部分:

  1. url="https://baike.baidu.com/item/刘德华/114923?fr=aladdin"
  2. res = requests.get(url,headers=headers)
  3. res.encoding = 'utf-8'
  4. text = res.text
  5. selector = etree.HTML(text)
  6. #属性
  7. key = []
  8. #值
  9. value = []
  10. dt =[]
  11. dd =[]
  12. basicInfo_left = selector.xpath('//*[@class="basicInfo-block basicInfo-left"]')[0]
  13. dt.append(basicInfo_left.xpath('.//dt'))
  14. dd.append(basicInfo_left.xpath('.//dd'))
  15. basicInfo_right = selector.xpath('//*[@class="basicInfo-block basicInfo-right"]')[0]
  16. dt.append(basicInfo_right.xpath('.//dt'))
  17. dd.append(basicInfo_right.xpath('.//dd'))
  18. for j in dt:
  19.     for i in j:
  20.         text = i.xpath('.//text()')
  21.         if len(text)==1:
  22.             text = text[0].replace(" ","").replace("\n","").replace("\xa0","")
  23.         else:
  24.             text = "-".join(text)
  25.             text = text.replace(" """).replace("\n""").replace("\xa0""")
  26.         key.append(text)
  27. for j in dd:
  28.     for i in j:
  29.         text = i.xpath('.//text()')
  30.         if len(text) == 1:
  31.             text = text[0].replace(" """).replace("\n""").replace("\xa0""")
  32.         else:
  33.             text = "-".join(text)
  34.             text = text.replace(" """).replace("\n""").replace("\xa0""").replace("-"" ")
  35.         value.append(text)
  36. for k in range(0,len(key)):
  37.     print(key[k]+":"+value[k])

3

处理数据

1.换行处理

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

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

2.多值处理

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

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

3.数据格式处理

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

source表示明星,比如刘德华

target表示value,比如中国

rela表示key,比如国籍

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

4

绘制知识图

1.后端部分

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

  1. #获取数据
  2. @app.route('/getdata')
  3. def getdata():
  4.     name_i = request.args.get('name')
  5.     # 采集数据
  6.     links = getlist(name_i)
  7.     #return Response(json.dumps(links), mimetype='application/json')
  8.     return render_template('index.html', linkss=json.dumps(links))
  9.       
  10. if __name__ == "__main__":    
  11.     """初始化"""
  12.     app.run(host=''+ip, port=5000,threaded=True)

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

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

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

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

2.网页部分

  1. var links=eval('{{linkss|safe }}');
  2. var nodes = {};
  3. links.forEach(function(link)
  4. {
  5.   link.source = nodes[link.source] || (nodes[link.source] = {name: link.source});
  6.   link.target = nodes[link.target] || (nodes[link.target] = {name: link.target});
  7. });

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』

2.爬取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.教你搭建一个花卉识别系统(超级简单)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/359286
推荐阅读
相关标签
  

闽ICP备14008679号