【自然语言处理概述】百度百科数据爬取



作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程爱好者,期待和大家一起学习,一起进步~
.
博客主页ぃ灵彧が的学习日志
.
本文专栏人工智能
.
专栏寄语:若你决定灿烂,山无遮,海无拦
.

文章目录

  • 【自然语言处理概述】百度百科数据爬取
  • 一、前沿
    • (一)、任务描述
    • (二)、环境配置
  • 二、代码部分
    • (一)、定义爬取信息
    • (二)、数据解析并保存
    • (三)、爬取每个选手的信息
  • 三、总结

一、前沿

(一)、任务描述

本实践使用Python来爬取百度百科中《乘风破浪的姐姐第二季》所有选手的信息,并进行可视化分析。其难点在于如何准确获取数据并进行处理获得可视化的结果。

数据爬取可以应用于自己收集网络已有数据,是一种较为普遍的方式。本案例通过获取百度百科的信息获得嘉宾的一系列数据,然后对数据进行处理与分析。


(二)、环境配置

本次实验平台为百度AI Studio,Python版本为Python3.7,下面介绍如何通过Python编程方式实现“海量”文件的遍历。


二、代码部分

(一)、定义爬取信息


import json
import re
import requests
import datetime
from bs4 import BeautifulSoup
import osdef crawl_wiki_data():headers={'User-Agent': 'Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebkit/537.36(KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36'}url = 'https://baike.baidu.com/item/乘风破浪的姐姐第二季'try:response = requests.get(url,headers=headers)soup = BeautifulSoup(response.text,'lxml')tables = soup.find_all('table')crawl_table_title = "按姓氏首字母排序"for table in tables:table_titles = table.find_previous('div')for title in table_titles:if(crawl_table_title in title):return tableexcept Exception as e:print(e)

(二)、数据解析并保存

使用上述定义好的函数,进行指定url页面的爬取,然后解析返回的页面源码,获取其中的选手姓名和个人百度百科页面链接,并保存:

def parse_wiki_data(table_html):bs = BeautifulSoup(str(table_html),'lxml')all_trs = bs.find_all('tr')stars = []for tr in all_trs:all_tds = tr.find_all('td')for td in all_tds:star = {}if td.find('a'):if(td.find_next('a').text.isspace() == False):star["name"] = td.find_next('a').textstar['link'] = 'https://baike.baidu.com'+td.find_next('a').get('href')stars.append(star)json_data = json.loads(str(stars).replace("\'","\""))with open('work/'+'stars.json','w',encoding='UTF-8') as f:json.dump(json_data,f,ensure_ascii=False)

(三)、爬取每个选手的信息

  • 根据图片链接列表pic_urls,下载所有图片,保存在以name命名的文件夹中。
def down_save_pic(name,pic_urls):path = 'work/'+'pics/'+name+'/'if not os.path.exists(path):os.makedirs(path)for i,pic_url in enumerate(pic_urls):try:pic = requests.get(pic_url,timeout=15)string = str(i+1) + '.jpg'with open(path+string,'wb') as f:f.write(pic.content)except Exception as e:print(e)continue

  • 爬取每个选手的百度百科个人信息,并保存:
def crawl_everyone_wiki_urls():with open('work/'+'stars.json','r',encoding='UTF-8') as file:json_array = json.loads(file.read())headers = {'User-Agent':'Mozilla/5.0(Windows NT 10.0; WOW64) AppleWebkit/537.36(KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36'}star_infos = []for star in json_array:star_info = {}name = star['name']link = star['link']star_info['name'] = nameresponse = requests.get(link,headers=headers)bs = BeautifulSoup(response.text,'lxml')base_info_div = bs.find('div',{'class':'basic-info cmn-clearfix'})dls = base_info_div.find_all('dl')for dl in dls:dts = dl.find_all('dt')for dt in dts:if "".join(str(dt.text).split()) == '民族':star_info['nation'] = dt.find_next('dd').textif "".join(str(dt.text).split()) == '星座':star_info['constellation'] = dt.find_next('dd').textif "".join(str(dt.text).split()) == '血型':star_info['blood_type'] = dt.find_next('dd').textif "".join(str(dt.text).split()) == '身高':height_str = str(dt.find_next('dd').text)star_info['height'] = str(height_str[0:height_str.rfind('cm')]).replace("\n","")if "".join(str(dt.text).split()) == '体重':star_infor['weight'] = str(dt.find_next('dd').text).replace("\n","")if "".join(str(dt.text).split()) == '出生日期':birth_day_str = str(dt.find_next('dd').text).replace("\n","")if '年' in birth_day_str:star_info['birth_day'] = birth_day_str[0:birth_day_str.rfind('年')]star_infos.append(star_info)if bs.select('.summary-pic a'):pic_list_url = bs.select('.summary-pic a')[0].get('href')pic_list_url = 'https://baike.baidu.com' + pic_list_urlpic_list_reponse = requests.get(pic_list_url,headers=headers)bs = BeautifulSoup(pic_list_response.text,'lxml')pic_list_html = bs.select('.pic-list img')pic_urls = []for pic_html in pic_list_html:pic_url = pic_html_get('src')pic_urls.append(pic_url)down_save_pic(name,pic_urls)json_data = json.loads(str(star_infos).replace("\'","\"").replace("\\xa0",""))with open('work/'+'stars_info.json','w',encoding='UTF-8') as f:json.dump(json_data,f,ensure_ascii=False)

  • 调用主程序main函数,执行上面所有的爬取过程:
if __name__ == '__main__':html = crawl_wiki_data()parse_wiki_data(html)print("所有信息爬取完成!")

三、总结

本系列文章内容为根据清华社出版的《自然语言处理实践》所作的相关笔记和感悟,其中代码均为基于百度飞桨开发,若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

最后,引用本次活动的一句话,来作为文章的结语~( ̄▽ ̄~)~:

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。

ps:更多精彩内容还请进入本文专栏人工智能,进行查看,欢迎大家支持与指教啊~( ̄▽ ̄~)~

【自然语言处理概述】百度百科数据爬取相关推荐

  1. 6.9 用Python操控数据库(批量删除,百度新闻数据爬取与存储,写入数据时进行去重处理,pandas读取sql数据)

    学习完MySQL数据库的基本操作后,下面来学习如何用Python连接数据库,并进行数据的插入.查找.删除等操作. 6.9.1 用PyMySQL库操控数据库 上一节在phpMyAdmin 中创建了数据库 ...

  2. java爬虫实现百度地图数据爬取

    本次项目主要实现百度地图地点检索功能的数据爬取,可以获得检索的相关信息.主要是采用百度地图API接口实现,采用的是servlet,数据库采用的是mybatis.话不多说,上代码. 1.DAO层数据 p ...

  3. 百度百科全站爬取教程

    百度百科全站 目前有16,330,473个词条 这里介绍一个基于scrapy的分布式百度百科爬虫,能够全量爬取百度百科的词条 github地址 特性 百科类网站全站词条抓取,包括百度百科.互动百科.w ...

  4. Python网络爬虫实战1:百度新闻数据爬取

    目录 一.  获取网页源代码 1.  四行代码获取(有时不灵) 2. 五行代码获取(常用方法) 二.分析网页源代码信息 方法1:F12方法 方法2:右击选择"查看网页源代码" 方法 ...

  5. nodejs express搭建服务器(爬虫知乎精华帖,个人学习用)五 对提到的关键字(书名或者电影名)去百度百科上爬取介绍

    var https = require('https'); var iconv = require('iconv-lite'); var cheerio = require('cheerio'); v ...

  6. python+按键精灵实现百度指数数据爬取

    百度指数本身已经很好用了,但是如果进行二次整理,需要把原始数据采集下来就不是那么方便了.网页的请求只有一次, 需要的具体数据随鼠标的移动变化,所以,常规的requests请求网页,解析网页并不能满足需 ...

  7. python爬取软件内数据_各种数据爬取工具爬虫合集整理

    却道天凉好个秋~ 不用编程敲代码的爬取数据的工具合集,简单上手易用的爬虫脚本工具软件汇总 1.工具软件类: Microsoft Excel excel也可以爬一些规整的表格数据等,没想到吧! 八爪鱼 ...

  8. 百度AI深度学习课程——《乘风破浪的姐姐》数据爬取

    <乘风破浪的姐姐>数据爬取 最近在学习百度AI深度学习课程,课程有一节讲解的是爬取<乘风破浪的姐姐>选手信息,以及选手百度百科中的图集图片.课程链接如下:https://ais ...

  9. python实现数据爬取——糗事百科爬虫项目

    python实现数据爬取--糗事百科爬虫项目 # urllib.request 请求模块 import urllib.request # re 模块使 Python 语言拥有全部的正则表达式功能. i ...

最新文章

  1. NameError: name 'go' is not defined
  2. c语言数组在栈上的分配,彻底弄懂为什么不能把栈上分配的数组(字符串)作为返回值...
  3. 内置h5 调用safari系统浏览器打开_开发教我做设计:移动端H5页面中的橡皮筋效果...
  4. springmvc的执行流程_springmvc执行流程
  5. LeetCode之Valid Parentheses
  6. 计算机操作系统英文版课后答案,计算机操作系统(第3版)课后习题答案(完整版)...
  7. 计算机主机配置有哪些,电脑主机配置清单有哪些 电脑主机配置清单及价格
  8. mqtt server python_使用python实现mqtt的发布和订阅
  9. 創世記(一): 一至三章
  10. java用对话框输出计算结果_Java怎么实现输入一个string表达式然后输出计算的结果...
  11. Android Studio 2.3报错: Error:Cause: buildToolsVersion is not specified解决
  12. python绝对值、加法
  13. 什么是ISBN码及如何制作
  14. 赛福基因公开课第二节《神经系统遗传病基因检测简介》
  15. 五、SPR 单一职责
  16. 【毕业设计_课程设计】基于移动设备的眼球追踪技术及其应用(源码+论文)
  17. 嘿嘿各位兄弟姐妹们,赚钱是一个男人最大的底气和尊严!
  18. 简单明了强烈推荐办公神器
  19. 吃货食堂-吃货们的天堂
  20. Linux安装JMeter进行压力测试

热门文章

  1. 【转帖】龙芯将两款 CPU 核开源,这意味着什么?
  2. 企业如何选择外贸erp软件
  3. 2. Sorting
  4. 计算机软件硬件边界如何定义,软件定义汽车?但别忘了硬件定义了软件的边界...
  5. 北大青鸟培训第五天:HTML和CSS相关知识 (持续更新)
  6. PPT经常用的115个技巧收藏
  7. 【每日随笔】网文小说工具及书籍推荐 ① ( 网文写手的入门书籍推荐 | 网文写手的进阶书籍推荐 | 提高文学素养的写作课 )
  8. php用什么系统好_php编程用什么系统好?
  9. BoardGame.io 五子棋(一)
  10. Oracle Study之--resmgr:cpu quantum等待事件