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

news2024/10/7 14:31:37

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


在这里插入图片描述


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

文章目录

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


一、前沿

(一)、任务描述

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

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


(二)、环境配置

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


二、代码部分

(一)、定义爬取信息


import json
import re
import requests
import datetime
from bs4 import BeautifulSoup
import os

def 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 table
    except 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').text
                    star['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'] = name
        response = 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').text
                if "".join(str(dt.text).split()) == '星座':
                    star_info['constellation'] = dt.find_next('dd').text
                if "".join(str(dt.text).split()) == '血型':
                    star_info['blood_type'] = dt.find_next('dd').text
                if "".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_url

            pic_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:更多精彩内容还请进入本文专栏人工智能,进行查看,欢迎大家支持与指教啊~( ̄▽ ̄~)~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/51970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

氮化镓(GaN)功率半导体之预测

前言 氮化镓(GaN)是一种非常坚硬且在机械方面非常稳定的宽带隙半导体材料。由于具有更高的击穿强度、更快的开关速度,更高的热导率和更低的导通电阻,氮化镓基功率器件明显比硅基器件更优越。 氮化镓晶体可以在各种衬底上生长&…

充分利用自动化测试的 10 个最佳实践

你试过吃带壳的坚果吗?如果是,我想这不是一次非常成功的经历。 虽然大家都知道坚果是非常健康和有营养的。矛盾的是,许多公司在实施测试自动化时没有考虑细微差别。每个人都知道它对身体有好处(就像吃坚果对我们健康有益一样&…

线上环境不要使用console.log,会导致页面卡顿,内存泄漏的原因

在我的这篇文章中分享了一个经验,就是vite打包之后会自动屏蔽所有的console.log打印的日志。 那么,在线上环境中不要使用 console.log 打印日志,已经成为共识,你知道是为什么么? 原因当然在于这个罪魁祸首 console 方…

深拷贝、浅拷贝的方法

目录 浅拷贝 深拷贝 与浅拷贝概念: 深浅拷贝出现的前提: 应用类型的数据(对象和数组) 深拷贝就是把目标对象里面的数据一个一个都复制下来,创建出一个一模一样的,存放地 址不一样,互不影响。…

【白嫖】如何底价续费服务器

目录 背景 问题 缓解方案 背景 现在各大云服务商的学生价服务器都已经关闭了,华为云、阿里云、百度云,以前都有学生价服务器,一年只要99。现在我找半天都没找到入口,而原价的一年得500块起步。。。 但是!&#xff0…

MySQL事务详解

目录 引例 什么是事务 一个完整事务所具有的四大属性 为什么会出现事务 事务常见操作方式 事务隔离级别 为什么要存在隔离级别 一致性 引例 如下图,是一个火车售票系统,当客户端A发现还有一张票时,将票卖掉,还没执行更新…

C++实现UDP可靠传输(二)

声明:禁止以任何形式转载本文章。本文章仅供个人学习记录与交流探讨,文章中提供的思路只是一种解决方案,代码也并非完整代码,如有需要,请自行设计协议并完成编程任务。 食用本文章之前,推荐阅读&#xff…

RKMEDIA--VENC/VDEC使用

前面两篇已经介绍了VI和VO的使用,本章节来介绍rkmedia且也是瑞芯微平台重点部分:编解码。 目录 一、简介 二、编解码能力 三、编码 编码初始化: 在初始化VENC时需要注意几点: venc编码帧率控制: 编码添加osd位图…

软件设计师考试重点1 计算机组成与体系结构

软件设计师考试重点1 计算机组成与体系结构一、 数据的表示1. 进制转换2. 原码/反码/补码/移码3. 数值表示范围4. 浮点数的运算二、运算器与控制器1. 计算机结构2. 计算机五大组成部分:3. CPU组成部分:4. 控制器组成部分:5. 运算器组成部分&a…

如何构建一个自动化油田注水站监控系统?

一、应用背景 目前,在大部分的钻井平台中,维护油田注水站的工作状态主要通过人工方式进行,这种方式不仅作业效率低且对工人的经验有着较高要求。此外,油田注水站的工作环境恶劣,为了能够有效地掌握各个设备的工作状态…

【测试沉思录】20. 如何做好测试需求分析?

作者:刘亚茹 编辑:毕小烦 我们都知道测试用例是软件测试中保障质量的必要手段,而测试需求作为用例编写的主要依据却往往被很多人忽视。到底什么是测试需求?又如何做好测试需求分析呢?本文带你了解一下。 1. 测试需求到…

Java项目如何导出数据为 PDF 文件?

文章目录Java项目如何导出数据为 PDF 文件?一、代码结构如下二、代码说明1、添加依赖 pom.xml3、添加字体4、PDF 导出工具类三、效果图结语Java项目如何导出数据为 PDF 文件? 一个小需求,需要将页面上的数据导出为PDF,正常情况下…

11月业务安全月报 | 台湾2300万人信息泄露;黑客两分钟即可破解安卓锁屏;乌克兰“IT军团”入侵俄罗斯中央银行

导语:随着数字化的深入普及,业务愈加开放互联。企业的关键数据、用户信息、基础设施、运营过程等均处于边界模糊且日益开放的环境中,涉及利益流和高附加值的业务面临多样的安全隐患,随时可能遭遇损失,进而影响企业运营…

Android 8.0网络DNS

1 Linux DNS规范 Linux上并没有一个单独的方法可以完成DNS查询工作;没有一个有这样的明确接口的核心系统调用system call。不过,glibc (nss)的getaddrinfo (3), gethostbyname (3)等相关API (RFC3493)提供了DNS查询功能。 1)不支持nscd&#…

关于使用STM32CubeMx配置串口出现的一些问题

一、使用CubeMX配置好串口中断的工程,打开工程添加相关代码后串口没有数据输出或者看不见数据但串口助手的RX会一直增加的问题。 参考:这里 大概意思就是时钟的原因,需要把stm32f4xx_hal_conf.h文件中的时钟改一下,将25MHz改为8…

Ansys Zemax | 使用 OpticStudio 进行闪光激光雷达系统建模(中)

在消费类电子产品领域,工程师可利用激光雷达实现众多功能,如面部识别和3D映射等。尽管激光雷达系统的应用非常广泛而且截然不同,但是 “闪光激光雷达” 解决方案通常都适用于在使用固态光学元件的目标场景中生成可检测的点阵列。凭借具有针对…

我要涨知识——TypeScript 经典高频面试题(二)

又是一个年底来了,好大一批人可能又准备跑路了,翻了翻掘金和 CSDN 发现好多大佬都有大厂 Offer ,看着看着我心动了! 话不多说,赶紧开干,给自己整了一个前端面试小助手——微信小程序内搜索 “WEB学习学习加…

jar启动指定JDK/JRE 安装路径教程

前言 因为疫情在家办公的缘故,有个老项目,需要改个接口,然后需要前端联调,因为外网服务器没有多余的空间了,想着把jar给前端让前端开发人员,在自己的本机启动后端服务,进行接口联调,…

streptavidin-PEG-6-FAM 链霉亲和素-聚乙二醇-6-羧甲基荧光素

产品名称:链霉亲和素-聚乙二醇-6-羧甲基荧光素 英文名称:streptavidin-PEG-6-FAM 纯度:95% 存储条件:-20C,避光,避湿 外观:固体或粘性液体,取决于分子量 PEG分子量可选:350、550、75…

虚拟内存系统【如何支持巨大的虚拟地址空间】

如何支持巨大的虚拟地址空间📖1. 为什么要支持巨大的虚拟地址空间📖2. 交换空间📖3. 存在位📖4. 页错误📖5. 为了处理页错误,操作系统大致做了什么?📖6. 页面换出📖7. 当…