使用requests库获取html页面并将其转换成字符串之后,需要进一步解析html页面格式,提取有用信息。

BeautifulSoup4库,也被成为bs4库(后皆采用简写)用于解析和处理html和xml。

1.调用

bs4库中最主要的便是bs类了,每个实例化的对象都相当于一个html页面

需要采用from-import导入bs类,同时通过BeautifulSoup()创建一个bs对象

代码如下:

import requests
from bs4 import BeautifulSoup
r=requests.get("https://www.baidu.com/")
r.encoding="utf-8"
soup=BeautifulSoup(r.text)
print(type(soup))

运行结果:

2.常用属性

创建的BeautifulSoup对象是一个树形结构,它包含html页面中的每一个Tag(标签)元素,可以通过<a>.<b>的形式获得

常见的属性如下:

head:

html页面<head>内容

title:

html页面标题,在<head>之中,由<title>标记

body:

html页面<body>内容

p:

html页面第一个<p>内容

strings:

html页面所有呈现在web上的字符串,即标签的内容

stripped_string:

html页面所有呈现在web上的非空字符串

接下来尝试爬取百度的标语“百度一下,你就知道”

首先我们通过requests来建立请求,可以通过查看源代码找到对应部分

如下所示:

所以直接通过调用<title>标签即可

代码如下:

import requests
from bs4 import BeautifulSoup
r=requests.get("https://www.baidu.com/")
r.encoding="utf-8"
soup=BeautifulSoup(r.text)
title=soup.title
print(title)

结果如图所示:

3.标签常用属性

每一个标签在bs4中也是一个对象,被称为tag对象,以糯米为例,常见结构如下:

<a class=“mnav” href="http://www.nuomi.com">糯米</a>

其中尖括号(<>)中标签的名字为 name,其他项为attrs,尖括号之间的内容为string

所以常见的标签属性分为4种

name:

字符串、标签的名字

attrs:

字典、包含了原来页面tag的所有属性,比如href

contrnts:

列表、tag下所有子tag的内容

string:

字符串、tag所包含的文本,网页中的真实文字

由于html可以在标签中嵌套其他的标签,所以string返回遵循以下原则

①如果标签内没有其他标签,string属性返回其中的内容

②如果标签内部还有标签,但只有一个标签,string返回最里面的标签内容

③如果内部超过1层嵌套标签,则返回为none

依然以百度为例,我们需要找到第一个<a>标签的string代码应当如下:

import requests
from bs4 import BeautifulSoup
r=requests.get("https://www.baidu.com/")
r.encoding="utf-8"
soup=BeautifulSoup(r.text)
print(soup.a.string)

结果如图所示:

4.调用find()与find_all()

html中,同一个特标签会有很多内容,比如百度首页<a>一共有13处,但值返回第一处

所以这时候需要通过find与find_all来寻找,这两个方法都会遍历html文档按照条件返回内容

使用方法如下:

BeautifulSoup.find_all(name,attrs,recursive,string,limit)

name:以标签名字进行搜索,名字用字符串类型表示

attrs:按照标签的属性来搜索,需要列出属性的名字和值,用json方法表示

recursive:设置查找层次,只查找当前标签的西一层时使用recursiv=false

string:按照关键字查找string属性内容,采用string=开始

limit:返回结果个数,默认全部

至于find()使用方法如find_all()相同,

BeautifulSoup.find_all(name,attrs,recursive,string)

区别在于find()只搜索第一个结果,find_all()返回所有结果。

我们尝试来通过find_all()来获取所有含有“百度”这一关键词的标签

首先需要调用re库,re是python的标准库可以采用compile()对字符串的检索

所以代码如下:

import requests
import re
from bs4 import BeautifulSoup
r=requests.get("https://www.baidu.com/")
r.encoding="utf-8"
soup=BeautifulSoup(r.text)
w=soup.find_all(string=re.compile("百度"))
print(w)

结果如下:

Python网络爬虫——BeautifulSoup4库的使用的更多相关文章

  1. Python网络爬虫:空姐网、糗百、xxx结果图与源码

    如前面所述,我们上手写了空姐网爬虫,糗百爬虫,先放一下传送门: Python网络爬虫requests.bs4爬取空姐网图片Python爬虫框架Scrapy之爬取糗事百科大量段子数据Python爬虫框架 ...

  2. Python网络爬虫学习总结

    1.检查robots.txt 让爬虫了解爬取该网站时存在哪些限制. 最小化爬虫被封禁的可能,而且还能发现和网站结构相关的线索. 2.检查网站地图(robots.txt文件中发现的Sitemap文件) ...

  3. Python网络爬虫与信息提取

    1.Requests库入门 Requests安装 用管理员身份打开命令提示符: pip install requests 测试:打开IDLE: >>> import requests ...

  4. Python网络爬虫与信息提取笔记

    直接复制粘贴笔记发现有问题 文档下载地址//download.csdn.net/download/hide_on_rush/12266493 掌握定向网络数据爬取和网页解析的基本能力常用的 Pytho ...

  5. python 网络爬虫全流程教学,从入门到实战(requests+bs4+存储文件)

    python 网络爬虫全流程教学,从入门到实战(requests+bs4+存储文件) requests是一个Python第三方库,用于向URL地址发起请求 bs4 全名 BeautifulSoup4, ...

  6. 关于Python网络爬虫实战笔记①

    python网络爬虫项目实战笔记①如何下载韩寒的博客文章 python网络爬虫项目实战笔记①如何下载韩寒的博客文章 1. 打开韩寒博客列表页面 http://blog.sina.com.cn/s/ar ...

  7. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  8. Python网络爬虫

    http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛 ...

  9. 【python网络爬虫】之requests相关模块

    python网络爬虫的学习第一步 [python网络爬虫]之0 爬虫与反扒 [python网络爬虫]之一 简单介绍 [python网络爬虫]之二 python uillib库 [python网络爬虫] ...

随机推荐

  1. 题解和总结——noip2019集训测试赛(一)贪吃蛇+字符串+都城

    Problem A: 贪吃蛇 描述 Input Output Sample Input [样例输入1] 4 5 ##... ..1#@ 432#. ...#. [样例输出1] 4 [样例输入2] 4 ...

  2. C函数库errno.h概况

    在linux中使用c语言编程时,errno是个很有用的动动.他可以把最后一次调用c的方法的错误代码保留.但是如果最后一次成功的调用c的方法,errno不会改变.因此,只有在c语言函数返回值异常时,再检 ...

  3. VM安装CentOS系统

    本篇文章主要介绍了VMware安装Centos7超详细过程(图文) 1.软硬件准备 软件:推荐使用VMwear,我用的是VMwear 12 镜像:CentOS7 ,如果没有镜像可以在官网下载 :htt ...

  4. 大数据之路day01_3--JAVA语言基础(1)

    从这里开始,正式进入正轨 1.关键字  2.main main是关键字吗? 不是,他只是一个标识符,只不过有点特殊,虚拟机可以识别. main(主函数)的作用 1:可以保证程序的独立运行 2:是程序的 ...

  5. 期末考试(正解:三分单峰函数 me~)

    好久没有水过杂题了! 今天lsc终于刚过了三道考试题来水杂题了! 期末考试 首先一看还是一脸mb(这是正常现象,毕竟我不像一些大神可以一眼出正解)然后我就被颓了标签,知道是三分单峰函数,但是自己实在是 ...

  6. 『题解』洛谷P5436 【XR-2】缘分

    Problem Portal Portal1:Luogu Description 一禅希望知道他和师父之间的缘分大小.可是如何才能知道呢? 一禅想了个办法,他先和师父约定一个正整数\(n\),接着他们 ...

  7. Scrapy进阶知识点总结(六)——中间件详解

    概述 查看scrapy官网的框架图,可以看出中间件处于几大主要组件之间,类似于生产流水线上的加工过程,将原料按照不同需求与功能加工成成品 其中4,5处于下载器与引擎之间的就是下载中间件,而spider ...

  8. 关于vue ui组件

    一.vue ui  组件 1: vue 当前很火前端框架vue 针对PC用户 pc 端与移动端区别 (1)屏幕宽度:992px > (2)操作方式:鼠标 事件   手指:触碰操作 -饿了么:基于 ...

  9. docker项目——上线tomcat网站

    项目: 1.使用docker部署tomcat环境 2.上线网站 3.完成访问使用等 第一步.启动基于tomcat镜像的容器 a.导入镜像 [root@localhost ~]# docker load ...

  10. 关于Eratosthenes筛子算法筛选小于n的素数的理解

    今天在学习Java核心技术第九章集合框架中的BitSet时,遇到了这个算法.Eratosthenes筛子算法时一个查找素数的方法,这并不是查找素数的最好方法,但是测试编译程序性能的一种流行的基准. 一 ...