来源:Python数据之道

作者:Peter

整理:阳哥

今天来跟大家分享用 BeautifulSoup 获取信息的一些知识点,文章内容由公众号读者 Peter 创作。

爬虫,是学习Python的一个有用的分支,互联网时代,信息浩瀚如海,如果能够便捷的获取有用的信息,我们便有可能领先一步,而爬虫正是这样的一个工具。

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库。由于 BeautifulSoup 是基于 Python,所以相对来说速度会比另一个 Xpath 会慢点,但是其功能也是非常的强大,本文会介绍该库的基本使用方法,帮助读者快速入门。

网上有很多的学习资料,但是超详细学习内容还是非官网莫属,资料传送门:

英文官网:https://www.crummy.com/software/BeautifulSoup/bs4/doc/

中文官网:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

本文的主要内容如下:

安装和使用

安装

安装过程非常简单,直接使用pip即可:

pip install beautifulsoup4

上面安装库最后的4是不能省略的,因为还有另一个库叫作 beautifulsoup,但是这个库已经停止开发了。

因为BS4在解析数据的时候是需要依赖一定的解析器,所以还需要安装解析器,我们安装强大的lxml:

pip install lxml

在python交互式环境中导入库,没有报错的话,表示安装成功。

使用

使用过程直接导入库:

from bs4 import BeautifulSoup

解析原理

解析原理

  • 实例化一个BeautifulSoup对象,并且将本地或者页面源码数据加载到该对象中

  • 通过调用该对象中相关的属性或者方法进行标签定位和数据提取

如何实例化BeautifulSoup对象

  1. 将本地的HTML文档中的数据加载到BS对象中

  2. 将网页上获取的页面源码数据加载到BS对象中

案例解析

原数据

假设我们现在本地有一个HTML文件待解析,具体内容如下,数据中有各种HTML标签:html、head、body、div、p、a、ul、li等

加载数据

from bs4 import BeautifulSoupfp = open('./test.html','r',encoding='utf-8')  # 打开本地文件
soup = BeautifulSoup(fp,'lxml')
soup

所有的数据解析都是基于soup对象的,下面开始介绍各种解析数据方法:

soup.tagName

soup.TagName返回的是该标签第一次出现的内容,以a标签为例:

数据中多次出现a标签,但是只会返回第一次出现的内容

我们再看下div标签:

出现了2次,但是只会返回第一次的内容:

soup.find('tagName')

find()主要是有两个方法:

  • 返回某个标签第一次出现的内容,等同于上面的soup.tagName

  • 属性定位:用于查找某个有特定性质的标签

1、返回标签第一次出现的内容:

比如返回a标签第一次出现的内容:

再比如返回div标签第一次出现的内容:

2、属性定位

比如我们想查找a标签中id为“谷歌”的数据信息:

在BS4中规定,如果遇到要查询class情况,需要使用class_来代替:

但是如果我们使用attrs参数,则是不需要使用下划线的:

soup.find_all()

该方法返回的是指定标签下面的所有内容,而且是列表的形式;传入的方式是多种多样的。

1、传入单个指定的标签

image-20210523170401516

上面返回的是列表形式,我们可以获取我们想要的内容:

2、传入多个标签(列表形式)

需要主要返回内容的表达形式,每个标签的内容是单独显示的

3、传入正则表达式

比如查看以a开头标签的全部内容

查看以li标签开头的全部内容:

选择器soup.select()

主要是有3种选择器,返回的内容都是列表形式

  • 类选择器:点

  • id选择器:#

  • 标签选择器:直接指定标签名

1、类选择器

2、id选择器

3、标签选择器

直接指定li标签

4、选择器和find_all()可以达到相同的效果:

soup.tagName和soup.find('tagName')的效果也是相同的:

层级选择器使用

在soup.select()方法中是可以使用层级选择器的,选择器可以是类、id、标签等,使用规则:

  • 单层:>

  • 多层:空格

1、单层使用

2、多层使用

获取标签文本内容

获取某个标签中对应文本内容主要是两个属性+一个方法:

  • text

  • string

  • get_text()

1、text

2、string

3、get_text()

3者之间的区别

# text和get_text():获取标签下面的全部文本内容
# string:只能获取到标签下的直系文本内容

获取标签属性值

1、通过选择器来获取

2、通过find_all方法来获取

BeautifulSoup实战

下面介绍的是通过BeautifulSoup解析方法来获取某个小说网站上古龙小说名称和对应的URL地址。

网站数据

我们需要爬取的数据全部在这个网址下:https://www.kanunu8.com/zj/10867.html,右键“检查”,查看对应的源码,可以看到对应小说名和URL地址在源码中位置

每行3篇小说在一个tr标签下面,对应的属性href和文本内容就是我们想提取的内容。

获取网页源码

import requests
from bs4 import BeautifulSoup
import pandas as pd
import reurl = 'https://www.kanunu8.com/zj/10867.html'
headers = {'user-agent': '个人请求头'}response = requests.get(url = url,headers = headers)
result = response.content.decode('gbk')   # 该网页需要通过gbk编码来解析数据
# result

实例化BeautifulSoup对象

soup1 = BeautifulSoup(result,'lxml')
# print(soup1.prettify())  美化输出源码内容

获取名称和URL地址

1、先获取整体内容

两个信息全部指定a标签中,我们只需要获取到a标签,通过两个属性href和target即可锁定:

# 两个属性href和target,不同的方法来锁定information_list = soup1.find_all('a',href=re.compile('^/book'),target='_blank')
information_list

2、再单独获取两个信息

通过属性来获取URL地址,通过文本来获取名称

url_list = []
name_list = []for i in information_list:url_list.append(i['href'])  # 获取属性name_list.append(i.text)  # 获取文本

3、生成数据帧

gulong = pd.DataFrame({"name":name_list,"url":url_list}
)gulong

我们发现每部小说的具体地址其实是有一个公共前缀的:https://www.kanunu8.com/book,现在给加上:

gulong['url'] = 'https://www.kanunu8.com/book' + gulong['url']   # 加上公共前缀
gulong.head()

另外,我们想把书名的《》给去掉,使用replace替代函数:

gulong["name"] = gulong["name"].apply(lambda x:x.replace("《",""))  # 左边
gulong["name"] = gulong["name"].apply(lambda x:x.replace("》","")) # 右边# 保存
gulong.to_csv("gulong.csv",index=False)  # 保存到本地的csv文件

最后显示的前5行数据:

总结

本文从BeautifulSoup4库的安装、原理以及案例解析,到最后结合一个实际的爬虫实现介绍了一个数据解析库的使用,文中介绍的内容只是该库的部分内容,方便使用者快速入门,希望对读者有所帮助。

作者简介

Peter,硕士毕业僧一枚,从电子专业自学Python入门数据行业,擅长数据分析及可视化。

个人站点:www.renpeter.cn

——END——

最近发现一个点外卖每顿饭都能少花5-20元的宝藏号。

就是她,↓点击下面名片关注公众号↓

进入公众号点击菜单领取红包最低5元,最高56元!

Python爬虫快速入门,BeautifulSoup基本使用及实践相关推荐

  1. 【Python】Python爬虫快速入门,BeautifulSoup基本使用及实践

    来源:Python数据之道 作者:Peter 整理:阳哥 爬虫,是学习Python的一个有用的分支,互联网时代,信息浩瀚如海,如果能够便捷的获取有用的信息,我们便有可能领先一步,而爬虫正是这样的一个工 ...

  2. python爬虫入门实例-Python爬虫快速入门:基本结构简单实例

    本爬虫系列入门教程假设读者仅有一点点Python基础或者近乎为零的基础.如果是有Python基础的可以跳过一些对于Python基本知识的补充. 爬虫能干什么呢?一句话概括,正常通过浏览器可以获取的数据 ...

  3. 如何自学Python爬虫,python爬虫快速入门教程

    如何自学Python爬虫?在大家自学爬虫之前要解决两个常见的问题,一是爬虫到底是什么?二是问什么要用Python来做爬虫?爬虫其实就是自动抓取页面信息的网络机器人,至于用Python做爬虫的原因,当然 ...

  4. Python爬虫快速入门:基本结构简单实例

    本爬虫系列入门教程假设读者仅有一点点Python基础或者近乎为零的基础.如果是有Python基础的可以跳过一些对于Python基本知识的补充. 爬虫能干什么呢?一句话概括,正常通过浏览器可以获取的数据 ...

  5. 嵩天python爬虫_我自己爬-python爬虫快速入门(一)

    request库 对于轻量级用户,像我一样只是准备写一个搞笑用的程序,requests是很方便的存在. 安装通过pip就不说了 request的几个主要方法 requests.request() 构造 ...

  6. Python爬虫快速入门,静态网页爬取!

    在开始之前,请确保你的电脑上已经安装好了BeautifulSoup库,可以通过在命令行中输入pip install beautifulsoup4来进行安装. 一.数据解析 在爬取之前,我们需要检测下响 ...

  7. python爬虫快速入门

    文章目录 一.简介 二.html形式爬虫 三.json形式爬虫 四.总结 一.简介 什么是爬虫? ​  爬虫不是在地上在墙上爬的虫子,而是指的是网络爬虫,那么网络爬虫是什么呢?其实搜索引擎就是干这事的 ...

  8. Python教程:网络爬虫快速入门实战解析

    建议: 请在电脑的陪同下,阅读本文.本文以实战为主,阅读过程如稍有不适,还望多加练习. 网络爬虫简介 网络爬虫,也叫网络蜘蛛(Web Spider).它根据网页地址(URL)爬取网页内容,而网页地址( ...

  9. 『Python开发实战菜鸟教程』实战篇:爬虫快速入门——统计分析CSDN与博客园博客阅读数据

    文章目录 0x01:引子 首先介绍一下网络爬虫是什么,可以用来做什么? 这里简单探讨一下网络爬虫的合法性 正式进入爬虫实战前,需要我们了解下网页结构 HTML CSS JScript 写一个简单的 H ...

最新文章

  1. ICLR 2022初审你得了多少分?平均4.93浮动,预测6分才被接收
  2. windows2003系列(之)搭建DHCP服务与中继代理图解
  3. 「mysql优化专题」单表查询优化的一些小总结,非索引设计(3)
  4. Spring-AOP 自动创建代理之DefaultAdvisorAutoProxyCreator
  5. java爬虫框架动态_java爬虫框架webmagic
  6. 用C++实现的壳(基础版)
  7. boost中unordered_map的用法
  8. sql limit 子句_Java 8流中的常见SQL子句及其等效项
  9. Linux中环境变量文件及配置
  10. 《spring 2.0技术手册》的技术写作方式值得学习!
  11. 基于JAVA+SpringMVC+Mybatis+MYSQL的校园二手市场系统
  12. Unity直接导出Android Apk包环境配置
  13. 520这个日子就应该用程序员最浪漫的表白方式
  14. 番茄花园xp开机音乐_抱歉,Windows XP的开机音乐骗了你20年
  15. 135编辑器html点击图片播放音乐,135编辑器怎么给文章添加音频和视频?135编辑器给文章添加音频和视频教程...
  16. 【英语学习工具】学习英语硬背硬记太难了, 在这里解说 LeHoCat 提供免费的 视频集 工具的使用方法, 看视频学英语的工具, 制作英语教学课件的工具, 帮助自学英语(详细图文)第2版
  17. oracle solaris 10 是什么,Oracle Solaris 10 操作系统
  18. 中南大学《实验室安全与环保知识》
  19. labwindows计时器
  20. okcc中FXS网关老掉注册要怎么解决?

热门文章

  1. Java中BigDecimal解决精度丢失问题
  2. 配置php.ini文件,关闭错误提示,打开错误日志,设置错误日志路径(亲测)
  3. Linux下 运行Jmeter (含一个jmeter简单示例)
  4. 分布式一致性协议Raft原理与实例
  5. Vue与jQuery的区别:数据绑定
  6. Redis之CentOS7安装配置Redis
  7. python机械编程_机器学习编程作业3——多类分类(Python版)
  8. 华为鸿蒙os手机图片,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  9. 过拟合解决方法python_《python深度学习》笔记---4.4、过拟合与欠拟合(解决过拟合常见方法)...
  10. 浏览器打开域名变成localhost_史上最全微信域名防封API原理及实现方案