使用 Beautiful Soup 解析网页内容

2023-05-16

安装Beautiful Soup

Beautiful Soup是一个Python的HTML解析框架,我们可以利用它方便的处理HTML和XML文档。Beautiful Soup有3和4两个版本,目前3已经停止开发。所以我们当然还是学习最新的Beautiful Soup 4.

首先第一件事情就是利用pip安装Beautiful Soup。我们使用下面的命令。

pip install beautifulsoup4

稍等片刻之后Beautiful Soup就安装好了。这样,我们就可以开始使用它了。如果需要详细文档的话可以参考Beautiful Soup中文文档,这是难得的不是机翻的文档。

解析文档

获取文档

Beautiful Soup只是一个HTML解析库,所以我们如果想解析网上的内容,第一件事情就是把它下载下来。对于不同的网站,可能会对请求进行过滤。糗事百科的网站就对没有UA的请求直接拒绝掉。所以如果我们要爬这样的网站,首先需要把请求伪装成浏览器的样子。具体网站具体分析,经过我测试,糗事百科只要设置了UA就可以爬到内容,对于其他网站,你需要测试一下才能确定什么设置能管用。

有了Request对象还不行,还需要实际发起请求才行。下面代码的最后一句就使用了Python3的urllib库发起了一个请求。urlopen(req)方法返回的是Reponse对象,我们调用它的read()函数获取整个结果字符串。最后调用decode('utf-8')方法将它解码为最终结果,如果不调用这一步,汉字等非ASCII字符就会变成\xXXX这样的转义字符。

import urllib.request as request

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
headers = {'User-Agent': user_agent}
req = request.Request('http://www.qiushibaike.com/', headers=headers)

page = request.urlopen(req).read().decode('utf-8')

查询和遍历方法

有了文档字符串,我们就可以开始解析文档了。第一步是建立BeautifulSoup对象,这个对象在bs4模块中。注意在建立对象的时候可以额外指定一个参数,作为实际的HTML解析器。解析器的值可以指定html.parser,这是内置的HTML解析器。更好的选择是使用下面的lxml解析器,不过它需要额外安装一下,我们使用pip install lxml就可以安装。

import bs4

soup = bs4.BeautifulSoup(page, "lxml")

有了BeautifulSoup对象,我们就可以开始解析了。首先先来介绍一下BeautifulSoup的对象种类,常用的有标签(bs4.element.Tag)以及文本(bs4.element.NavigableString)。还有注释等对象,不过不太常用,所以就不介绍了。在标签对象上,我们可以调用一些查找方法例如find_all等等,还有一些属性返回标签的父节点、兄弟节点、直接子节点、所有子节点等。在文本对象上,我们可以调用.string属性获取具体文本。

然后来说说BeautifulSoup的遍历方法。基本所有操作都需要通过BeautifulSoup对象来使用。使用方式主要有两种:一是直接引用属性,就是soup.title这样的,会返回第一个符合条件的节点;二是通过查找方法例如find_all这样的,传入查询条件来查找结果。

再来说说查询条件。查询条件可以是:字符串,会返回对应名称的节点;正则表达式,按照正则表达式匹配;列表,会返回所有匹配列表元素的节点;真值True,会返回所有标签节点,不会返回字符节点;方法,我们可以编写一个方法,按照自己的规则过滤,然后将该方法作为查询条件。本来还想写详细一点,但是由于有中文文档,所以我还是不写了。直接看关于查询的文档就好了。我还发现一篇不错的博文,大家可以参考一下,这篇博文介绍的更详细。

实际例子

爬取糗事百科段子

首先打开糗事百科网站,按F12打开开发人员工具,然后在旁边点击分离按钮把它变成独立窗口,然后切到元素标签并最大化窗口。然后点击那个鼠标按钮,再返回糗事百科页面,并点击一个段子,这样就可以查看段子在HTML文档的什么位置了。

HTML结构

首先分析一下HTML代码,然后我们就可以查找所需的内容了。这里需要说明一下,查询方法返回的是结果集,对结果集遍历可以得到标签或者文本对象。如果调用标签对象的.contents,会返回一个列表,列表内是标签、文本或注释对象。动态语言的优势就是使用灵活,缺点就是没有代码提示。虽然总共代码没几行,但是还是花了我一番功夫。

divs = soup.find_all('div', class_='article block untagged mb15')
for div in divs:
    links = div.find_all('a', href=re.compile(r'/article/\d*'), class_='contentHerf')
    for link in links:
        contents = link.span.contents
        contents = [i for i in contents if not isinstance(i, bs4.element.Tag)]
        print(contents)

上面的代码会输出首页的所有段子。这样我们便实现了半个爬虫。为什么是半个呢?因为一个完整的爬虫可以爬取多个页面,为了简便这里只爬首页,所以只能算半个爬虫。不过如果你想爬取多个页面,代码稍加修改即可实现。

百度贴吧楼层

本来还想写一个爬取百度贴吧楼层的爬虫。但是一看百度贴吧的HTML代码,我感觉这个功能好像比较复杂,所以就不做了……喜欢挑战的同学可以试试看。

百度贴吧代码

BeautifulSoup是一个HTML/XML 解析库,可以解析并修改HTML和XML文档。不过一般人都用它来解析网页实现爬虫。不过既然有中文文档,所以如果你想用它来操作XML文件,照着文档写就行了。这里就不作介绍了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Beautiful Soup 解析网页内容 的相关文章

  • 解决dialog在横竖屏切换时消失

    以AlertDialog为例 一 将AlertDialog视图封装在dialogfragment fragmentdeAlertDialog子类 实例中 package com example t import android app Al
  • PowerShell压缩与解压缩

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 压缩 因为Powershell中没有提供关于压缩的命令 xff0c 所以需要调用 Net中的对象来完成压缩功能 NAME zip DESCRIPTION 压缩文件 PA
  • opensuse12.1的gnome3“系统错误无法恢复”的解决办法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 我的opensuse12 1的susu用户不知道折腾什么了又无法进入gnome3 老是提示 系统错误并且无法恢复 xff0c 说什么什么bar插件有问题 xff0c 然后只
  • 前端如何获取http状态码400的返回值

    axios get 34 check mobile and sent code 34 withCredentials span style color 0000ff true span params mobile formInline mo
  • 空间权重矩阵(SWM)

    基本原理 如何利用数学 xff08 如用面积 距离等 xff09 建立空间数据和非空间数据之间的关系 xff1f 对于空间统计而言 xff0c 空间权重矩阵是一种有效的表达空间关系的方式 因此 xff0c 它是用量化的方法表示了数据之间的
  • Oracle: 输入的ADMIN 口令不符合Oracle建议的标准

    安装oracle 11g 发行版2时 xff0c 会出现如下提示 xff1a 管理口令 P INS 30011 输入的 ADMIN 口令不符合 Oracle 建议的标准 这是怎么会事儿呢 xff1f 其实很简单 xff0c 这个是Oracl
  • 2016年7月21日学习笔记

    2016年 7 月 21 日学习笔记 Linux安装以后出现的文件目录的作用 xff1a 文件系统的类型 LINUX有四种基本文件系统类型 xff1a 普通文件 目录文件 连接文件和特殊文件 xff0c 可用 file 命令来识别 普通文件
  • Java架构进阶之路——阿里大牛强力推荐书单(附赠电子版)

    1 深入理解Java虚拟机 xff1a JVM高级特性与最佳实践 本书适合所有Java程序员 系统调优师和系统架构师阅读 共分为五大部分 xff0c 围绕内存管理 执行子系统 程序编译与优化 高效并发等核心主题对JVM进行了全面而深入的分析
  • 给Hexo搭建的博客绑定域名

    前言 前几天利用闲置时间 xff0c 利用hexo在GitHub上搭建了一个静态博客 xff0c 那么既然是个人博客 xff0c 当然要上自己的域名了 step 1 首先你得你得搭建 XXX github io 这样的博客 xff0c he
  • chrome浏览器提取网页视频

    http blog csdn net pipisorry article details 37728839 在我们平时上网看视频听音乐时都会产生缓存 xff0c 可是我们非常难通过一些软件把当中的视频和音乐文件提取出来 网页抓取视频的方法
  • js 统计一个字符串中,出现最多的字符和出现次数

    运用到的关键函数是str charAt index xff1a 根据位置返回字符 另外 xff0c 建立一个对象o xff0c 其中存放的key为字符串的各不重复的字母 xff0c 键值为出现的次数 代码 xff1a span class
  • IdentityServer4 配置负载均衡

    如果使用 IdentityServer4 做授权服务的负载均衡 xff0c 默认情况下是不可以的 xff0c 比如有两个授权服务站点 xff0c 一个资源服务绑定其中一个授权服务 xff08 Authority配置 xff09 xff0c
  • android 打开串口log,user版本如何打开uart,让android log从串口kernel log输出

    数据流控制是否正确 xff0c 一般需关闭 xff0c 下面为RS232的三种流控制模式介绍 xff1a DTR DSR xff1a 硬件上要有对应接口 xff0c 软件上实现对应协议 xff0c 才能实现此流控制 具体实现起来 xff0c
  • 安装flashplugin提示依赖libgdk-pixbuf2.0-0

    为什么80 的码农都做不了架构师 xff1f gt gt gt 今天安装flashplugin 出现问题 xff0c sudo apt get install adobe flashplugin 结果提示 xff1a 下列软件包有未满足的依
  • Python新手入门教程,从环境准备到掌握基本编程

    Lesson 1 准备好学习Python的环境 下载的地址是 xff1a www python org 为了咱们的便当 xff0c 我在校内作了copy xff1a http 10 1 204 2 tool compiler amp IDE

随机推荐

  • mariadb使用C语言编程,MHA实现mariadb的高可用的详细步骤及配置参数详解

    MHA实现mariadb的高可用的详细步骤及配置参数详解 A 实验环境说明 a 4台centos7主机 b 角色说明 xff1a a MHA xff1a 192 168 36 35 b Master mariadb xff1a 192 16
  • c语言中sizeof函数的作用是,c语言中sizeof函数的用法

    C语言sizeof函数如何使用 xff1f 怎样利用sizeofCSS布局HTML小编今天和大家分享各种数据类型占用的字节数 xff1f 1 sizeof不是函数 xff0c 它只是一个操作符 operator 2 sizeof的作用是返回
  • AutoCAD快捷键大全

    送给学习AutoCAD的朋友 xff0c 最后一张图片是可以打印的键盘标签 xff0c 可以打印出来贴在键盘上方便记住 xff01 如果感觉模糊的话 xff0c 可以单击文章图片进行查看 xff01
  • 如何恢复U盘里的删除文件?

    对于经常使用到U盘的用户来说 xff0c 误删U盘内重要数据的情况经常发生 xff0c U盘内重要的资料从电脑上被删除后 xff0c 不经过回收站 xff0c 我们很难从回收站中还原数据 那么 xff0c 如何恢复u盘删除文件 xff1f
  • maven maven.compiler.source和maven.compiler.target的坑

    最近建议产品组把jdk 1 7升级到1 8 xff0c 昨晚开发报了个问题过来 xff0c 说maven compiler source和maven compiler target改成1 8之后 xff0c 编译出来的代码还是1 7 xff
  • 1‘b0 什么意思

    在看datasheet 中有类似表达式如下 xff1a 3 39 b000 1 39 b1 1 39 b0 3 39 b000这个表示 xff1a b代表二進制 3代表位元數 1 39 b1 xff1a 宣告為一位元二進制之值為1 xff0
  • css 识别软件测出来的尺寸和代码设置的不一样

    这是我在模仿网页时遇到的问题 xff0c 困扰了一会儿 xff0c 情况是这样的 我下载了参考的网页html文件 xff0c 为了测量某个box的高度 xff0c 用了一款可以截图识别的软件 xff1a 量出来的box高度是30px xff
  • SpringBoot中注入ApplicationContext对象的三种方式

    在项目中 xff0c 我们可能需要手动获取spring中的bean对象 xff0c 这时就需要通过 ApplicationContext 去操作一波了 xff01 1 直接注入 xff08 Autowired xff09 span clas
  • vue中$attrs你会用吗?

    这篇文章的知识点是父子组件通讯 xff0c 如果你了解 props 但是还没了解过 attrs xff0c 那么建议你花1分钟时间阅读 xff0c 了解它的优点 xff0c 并学会在项目中使用 关于 attrs的介绍 包含了父作用域中不作为
  • 企业微信三方应用开发(二)授权开通及登录流程

    何谓企业微信第三方应用 一句话简介 一个S商场 企业微信 里入驻了D商站 xff08 服务商 xff09 在卖他的C产品 xff08 三方应用 xff09 三句话路径 我们申请成为企业微信服务商 xff0c 入驻到企业微信 然后经过 应用开
  • PHP+AJAX实现账号注册和登陆,附可用demo

    前言 登陆和注册已经是网站的标配了 xff0c 所以这是我们web开发学习过程中必学的了 其实很容易实现 xff0c 只需要懂数据库的增删改查 xff0c 还有if else的条件语句即可做出来 目录 css Login Reg css s
  • ftp服务器无法使用浏览器访问解决方法

    浏览器默认工作在被动模式 可能你的环境无法让ftp服务器工作在主动模式 这个很容易测试 你在IE浏览器的工具 internet选项 高级中取消使用被动ftp的设置 xff0c 看看浏览器是否还可以访问ftp服务器 xff0c 如果访问不了
  • Python抓取糗事百科成人版图片

    最近开始学习爬虫 xff0c 一开始看的是静觅 的爬虫系列文章 xff0c 今天看到糗事百科成人版 xff0c 心里就邪恶了一下 xff0c 把图片都爬下来吧 xff0c 哈哈 虽然后来实现了 xff0c 但还是存在一些问题 xff0c 暂
  • vc中调用Com组件的方法详解

    Requirement 1 创建myCom dll 该COM只有一个组件 两个接口IGetRes 方法Hello IGetResEx 方法HelloEx xff1b 2 在工程中导入组件或类型库 import 34 组件所在目录myCom
  • matlab练习程序(二值图像内外边界跟踪)

    目标内边界的像素全都在目标里面 xff0c 目标外边界的像素全都不在目标上 xff0c 是包围着目标的 二值图像内外边界的计算都是有两种方法的 xff0c 所以一共是4种算法 xff0c 不过实际用到跟踪的只有一个而已 首先是内边界跟踪 x
  • 如何使用.NET开发全版本支持的Outlook插件产品(三)——全面控制

    插件项目所有代码都已经上传至 https github com VanPan TestOutlookAdding 进阶基础 COM查看 首先 xff0c 对于Outlook对象模型 xff0c MSDN早就有非常详细的介绍 xff0c 请直
  • Android中应用程序如何获得系统签名权限

    最近在做一个控制电视界面的应用 xff0c 模拟电视遥控器操作 xff0c 代码如下 public static void simulateKeystroke final int KeyCode new Thread new Runnabl
  • 使用PostSharp在.NET平台上实现AOP

    摘要 本文首先介绍AOP xff08 面向方面编程 xff09 的相关概念及理论 xff0c 然后介绍如何使用PostSharp框架在 NET平台上实现AOP xff0c 最后对PostSharp的机制及AOP的优劣进行一个简单的分析 AO
  • python 带头节点的单链表相关函数

    链表用头结点还是头指针让我混乱 在写append函数时 xff0c 发现网上的写法各有不同 xff0c 而带头结点的会更好理解 xff0c 也更简洁 以下是带头结点的单链表一些简单的相关函数 span class token keyword
  • 使用 Beautiful Soup 解析网页内容

    安装Beautiful Soup Beautiful Soup是一个Python的HTML解析框架 xff0c 我们可以利用它方便的处理HTML和XML文档 Beautiful Soup有3和4两个版本 xff0c 目前3已经停止开发 所以