2025年3月25日 星期二 甲辰(龙)年 月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python数据分析的bs4用法

时间:04-03来源:作者:点击数:40

在爬虫的世界里,数据解析占用很重要的位置

数据解析原理:

  1. 标签定位
  2. 提取标签、标签属性中存储的数据值

bs4数据解析原理:

  • 1.实例化一个BeautifulSoup对象,并且将页面原码数据加载到该对象中
  • 2.通过调用BeautifulSoup对象中相关的属性或方法进行标签定位和数据提取

通过上述描述。我们需要安装所需要的库文件。执行如下:

环境安装:

  • pip install bs4
  • pip install lxml

使用时候导入包:

  • from bs4 import BeautifulSoup

我们先来熟悉bs4的对象中相关的属性:

  • 1)根据标签名查找
  • - soup.a 只能找到第一个符合要求的标签
  • 2)获取属性
  • - soup.a.attrs 获取a所有的属性和属性值,返回一个字典
  • - soup.a.attrs['href'] 获取href属性
  • 3)获取其标签内的内容
  • - soup.a.string
  • - soup.a.text
  • - soup.a.get_text()
  • 【注意】如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容
  • 4find:找到第一个符合要求的标签
  • - soup.find('a') 找到第一个符合要求的
  • - soup.find('a',)
  • - soup.find('a', alt="xxx")
  • - soup.find('a', class_="xxx")
  • - soup.find('a', id="xxx")
  • 5find_all:找到所有符合要求的标签
  • - soup.find_all('a')
  • - soup.find_all(['a','b']) 找到所有的ab标签
  • - soup.find_all('a', limit=2) 限制前两个
  • 6)根据选择器选择指定的内容
  • select:soup.select('#feng')
  • - 常见的选择器:标签选择器(a)、类选择器(.)、id选择器(#)、层级选择器
  • - 层级选择器:
  • div .dudu #lala .meme .xixi 下面好多级
  • div > p > a > .lala 只能是下面一级
  • 【注意】select选择器返回永远是列表,需要通过下标提取指定的对象

实例演示:

  • from bs4 import BeautifulSoup
  • import requests
  • url ="https://www.shicimingju.com/book/sanguoyanyi.html"
  • headers = {
  • 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
  • ' Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74'
  • }
  • result = requests.get(url=url,headers=headers)
  • result.encoding ="utf-8"
  • result_text = result.text
  • # 将内容存储到html中去
  • # with open('shici.html',mode='w',encoding='utf-8') as f:
  • # f.write(result_text)
  • # 开始使用bs4 进行数据解析(这里lxml是解析器的一种。还有其他解析方式,html.parse,xml,html5lib等)
  • soup = BeautifulSoup(result_text,'lxml')
  • print(soup.title.text); #查找标签下的文本

上面执行一下,得到的就是第一个title标签的文本:

下面的代码就是获取唯一元素的代码和文本:

  • print(soup.find('div',id='top_left_menu'))
  • print(soup.find('p',class_='des').text)

获取元素下批量元素下的内容:

  • book_mulu = soup.find('div',class_="book-mulu").find_all('a')
  • for muli in book_mulu:
  • print(muli.text)

也可以通过select选择器进行选择:

  • lists = soup.select('div#top_right_nav >ul>li>a')
  • list_content =[]
  • for i in lists:
  • list_content.append(i.attrs['data-cate'])
  • print(list_content)

使用bs4解析数据,第一步就是将html转为bs4.BeautifulSoup的类型,然后通过find方法找到内容具体的标签,最后再通过select方法进行选择相关所需内容。多多练习就会使用。其实需要有一定的前端知识。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门