BeautifulSoup
bs4主要使用find()方法和find_all()方法来搜索文档。
find()用来搜索单一数据,find_all()用来搜索多个数据

find_all()与find()

name –> tag名
string –> 内容
recursive –>是否搜索所有子孙节点 默认为true 设为false只搜索子节点

两方法用法相似这里以find_all()为例。

#搜索tag名 <title></title>
soup.find_all("title") #关于属性
#搜索id为"link2"的标签
soup.find_all(id='link2') #这里属性的值可以使用字符串,正则表达式 ,列表,True
soup.find_all(id=re.compile("elsie")) #可以指定多个条件
soup.find_all(href=re.compile("elsie"), id='link1') #对于有些不能指定的标签(data-foo)
soup.find_all(attrs={"data-foo": "value"}) #对于class -->class为python保留字使用class_
soup.find_all(class_="top")
#属性结束 #关于string(内容)
#基础 内容为'Elsie'的
soup.find_all(string="Elsie") #内容在数组中的
soup.find_all(string=["Tillie", "Elsie", "Lacie"]) #内容匹配正则表达式的
soup.find_all(string=re.compile("Dormouse")) #匹配函数
soup.find_all(string=is_the_only_string_within_a_tag)
#内容结束 #搜索限制
#限制搜索数量为2
soup.find_all("a", limit=2) #只搜索直接子节点
soup.html.find_all("a", recursive=False)
#搜索限制结束

简写

soup.find_all("a")
#等价于
soup("a")
soup.title.find_all(string=True)
#等价于
soup.title(string=True)

CSS选择器

Beautiful Soup支持大部分的CSS选择器

#搜索tag为title
soup.select("title") #通过tag标签逐层查找
soup.select("html head title") #寻找直接子标签
soup.select("head > title")
soup.select("p > #link1") #选择所有紧接着id为link1元素之后的class为sister的元素
soup.select("#link1 + .sister") #选择p元素之后的每一个ul元素
soup.select("p + ul") #同时用多种CSS选择器查询元素
soup.select("#link1,#link2") #通过查询元素属性
soup.select('a[href="http://example.com/elsie"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>] soup.select('a[href^="http://example.com/"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] soup.select('a[href$="tillie"]')
# [<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] soup.select('a[href*=".com/el"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
#通过查询元素属性结束 #通过语言查找
soup.select('p[lang|=en]') #查找第一个元素
soup.select_one(".sister")

  

find_其他

find_parents() 和 find_parent()

搜索当前节点的父节点

#查找一个标签a
a = soup("a", id="link1") #查找a的父节点中的P标签
a_string.find_parent("p")

find_next_siblings() 和 find_next_sibling()

搜索当前节点后边解析的兄弟节点
(可以理解为搜索当前标签下边的同级节点)

find_previous_siblings() 和 find_previous_sibling()

搜索当前节点前边解析的兄弟节点
(可以理解为搜索当前标签上边的同级节点)

find_all_next() 和 find_next()

对当前节点之后的节点进行迭代

find_all_previous() 和 find_previous()

对当前节点之前的节点进行迭代

Python Bs4 回顾的更多相关文章

  1. python 基础回顾 一

    Python 基础回顾 可变类型:list ,dict 不可变类型:string,tuple,numbers tuple是不可变的,但是它包含的list dict是可变的. set 集合内部是唯一的 ...

  2. Python -bs4介绍

    https://cuiqingcai.com/1319.html Python -BS4详细介绍Python 在处理html方面有很多的优势,一般情况下是要先学习正则表达式的.在应用过程中有很多模块是 ...

  3. python bs4 + requests4 简单爬虫

    参考链接: bs4和requests的使用:https://www.cnblogs.com/baojinjin/p/6819389.html 安装pip:https://blog.csdn.net/z ...

  4. 全面进攻python之前回顾下自己近三个月的自学之路

    人生是在一直试错的过程中成长起来的.这句话貌似很有道理,但回顾了下自己近三个月python自学学习之路,又觉得自己对这句话又有了新的看法------行动之前必须要有正确的选择,这样做错了才能成长. 2 ...

  5. 零基础Python知识点回顾(一)

    如果你是小白,建议只要安装官网的python-3.7.0-amd64.exe 然后在电脑cmd命令提示符  输入检查是否已经安装pip,一般安装了python都会有的. >pip         ...

  6. python bs4 BeautifulSoup

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.bs4 模块的 BeautifulSoup 配合requests库可以写简单的爬虫. 安装 命令:pip in ...

  7. python bs4解析网页时 bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to inst(转)

    Python小白,学习时候用到bs4解析网站,报错 bs4.FeatureNotFound: Couldn't find a tree builder with the features you re ...

  8. python基础回顾1

    定义 tuple(元组), list (表) #!/usr/bin/env python # encoding: utf-8 a = 10 #定义一直变量,无需声明 s1 = (2,1.3,'love ...

  9. Python知识回顾 —— 面向对象

    博客转载自 http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/linhaifeng/articles/62040 ...

随机推荐

  1. 洛谷p1106 删数问题 题解

    传送门 # 4.24一个重要的日子.我人生中第一道7个测试点下载了5个的题目被我发现了,第一次用光下载数据点机会,真心坑点重重. 这题是一道很经典的贪心题目,可能是因为我太蒻了,导致我一直以为最少普及 ...

  2. vue笔记-条件渲染

    条件渲染 1:指令v-if单独使用和结合v-else //单独使用 <h1 v-if="ok">Yes</h1> //组合使用 <h1 v-if=&q ...

  3. 解决Spring boot中读取属性配置文件出现中文乱码的问题

    问题描述: 在配置文件application.properties中写了 server.port=8081 server.servlet.context-path=/boy name=张三 age=2 ...

  4. centos7上PhantomJS 过期之后改用Chrome时填的坑

    突然有个自动化需求所以准备使用模拟点击的方法, 在使用之前的PhantomJS时,报错 UserWarning: Selenium support for PhantomJS has been dep ...

  5. Django缓存机制

    缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增删改查,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的后台操作,都会消耗很多的服务 ...

  6. 多个PVSS数据点属性读写的优化处理

    注:本译文出自15多年前,尚未用最新软硬件平台进行重新测试,只提供方法论层面的参考,具体性能指标不具备参考意义. 多个PVSS数据点属性读写的优化处理 本文档概述了测试三种读取和写入多个PVSS数据点 ...

  7. python3 通过邮件发送测试报告

    通过之前的学习,了解到了如何利用excel进行读取数据,如何采用DDT数据驱动,如何使用unittest.下面是将之前所学进行结合,并发送邮件-->leader,废话不多说,上代码: email ...

  8. PHP常用日期加减计算方法实例

    PHP常用日期加减计算方法实例 实例总结了PHP常用日期加减计算方法.分享给大家供大家参考,具体如下: PHP 标准的日期格式 date("Y-m-d H:i:s"); PHP 简 ...

  9. PeopleSoft 启用多语言输入

    今天,我的一位同事询问有的人有语言选择,有的人没有(如下图所示). 以下是PT856.09菜单路经: 主菜单-->我的首选项--->一般设置--->多语言条目

  10. .Net Core 部署 CentOs7+Nginx

    先爆图 由于是初学者,部署出来这个界面也不容易,此前第一步弄了个这个出来 动态的没问题,然后静态资源死活就是不出来,弄了两个小时没有结果,带着遗憾睡了个觉 试验1: server { listen ; ...