一、基本使用

from bs4 import BeautifulSoup

htmlCharset = "GB2312"

soup=BeautifulSoup(html_doc,'lxml', fromEncoding=htmlCharset) #具有容错功能,指定编码

res=soup.prettify() #处理好缩进,结构化显示

一、标签选择器

print(soup.p) #存在多个相同的标签则只返回第一个
print(soup.a) #存在多个相同的标签则只返回第一个
print(soup.p.name)#获取标签的名称
print(soup.p.attrs)#获取标签的属性
print(soup.p.string)#获取表的内容
print(soup.head.title.string)#嵌套选择
print(soup.body.a.string)#嵌套选择print(soup.p.contents) #p下所有子节点 print(soup.p.children) #得到一个迭代器,包含p下所有子节点 print(soup.p.descendants) #获取子孙节点,p下所有的标签都会选择出来 print(soup.a.parent) #获取a标签的父节点 print(soup.a.parents) #找到a标签所有的祖先节点,父亲的父亲,父亲的父亲的父亲.print(soup.a.next_siblings) #得到生成器对象,获取标签下面的兄弟print(soup.a.previous_siblings) #得到生成器对象获取标签前面的兄弟

二、标准选择器

  格式:find_all(name,attrs,recursive,text,**kwargs) 即find_all(标签名称,标签属性,嵌套查找,文本查找,**kwargs)

1、按照标签名查找
print(soup.find_all('a',id='link3',attrs={'class':"sister"}))
print(soup.find_all('a')[0].find('span')) #嵌套查找#2、按照属性查找
# print(soup.p.find_all(attrs={'id':'link1'})) #等同于print(soup.find_all(id='link1'))
# print(soup.p.find_all(attrs={'class':'sister'}))
# print(soup.find_all(class_='sister'))#3、按照文本内容查找
print(soup.p.find_all(text="The Dormouse's story")) # 按照完整内容匹配(是==而不是in),得到的结果也是内容

4、按正则表达式查找
 soup.findAll(re.compile('^b'))#默认已导入re本语句会查找所有b开头的标签,例如:body,b
5、按照列表查找soup.findAll(['p','title'])#传入列表时,BeautifulSoup会将所有与列表中任一匹配的元素返回。

4、find和find_all的异同  1、find()相当于find_all()中limit=1的时候,而.limit参数是用于限制返回搜索的结果数,当搜索的达到limit限制时,就停止搜索返回搜索结果。  2、find()返回的是结果,find_all()返回的是一个列表  3、两者的使用格式都相同

总结:   soup.find_all(href=re.compile('baidu'))#href包含‘href’的tag    soup.find_all(href=re.compile('baidu'),id='box1)#传入多个参数,找出同时满足两个条件的tag    soup.find_all(class_='myclass')#找出class值为myclass的tag,注意下划线不能少    soup.findAll(attrs={'class':'myclass','id'='box'})#特殊的参数可以定义字典参数来查找。查找多个参数时,也可以用此方法

    如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当作指定名字tag的属性来搜索,
    如果包含一个名字为 id 的参数,Beautiful Soup会搜索每个tag的”id”属性。
       当想用class的时候,由于class是python的关键词,不能直接用,可以用class_代替class

五 CSS选择器

  1、CSS选择器

print(soup.p.select('.sister'))    #
print(soup.select('.sister span'))
print(soup.select('#link1'))
print(soup.select('#link1 span'))
print(soup.select('#list-2 .element.xxx'))
print(soup.select('#list-2')[0].select('.element')) #可以一直select,但其实没必要,一条select就可以了,嵌套查找
print(soup.select('#list-2 h1')[0].attrs)# 获取属性
print(soup.select('#list-2 h1')[0].get_text())# 获取内容soup.select('.myclass #box')#后代查找
soup.select('head>title')#子查找
soup.select('div+p')#相邻兄弟查找
soup.select('div~p’)#后续兄弟查找soup.select('.myclass a[id="box"]') #同时还可以加入属性查找。select()方法返回的是列表形式。
 
 

转载于:https://www.cnblogs.com/xuanan/p/7810305.html

爬虫五 Beautifulsoup模块详细相关推荐

  1. python bs4模块_python爬虫之Beautifulsoup模块用法详解

    什么是beautifulsoup: 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.(官方) beautifulsoup是 ...

  2. 浅谈Python爬虫之BeautifulSoup模块

    目录 ​ 前言 安装库 导入库 解析文档示例 提取数据示例 CSS选择器 实例小项目 总结 前言 BeautifulSoup是主要以解析web网页的Python模块,它会提供一些强大的解释器,以解析网 ...

  3. Python爬虫笔记——BeautifulSoup模块

    Target:学会用BeautifulSoup解析和提取网页中的数据. [解析数据]:把服务器返回来的HTML源代码翻译为我们能看懂的样子. [提取数据]:是指把我们需要的数据从众多数据中挑选出来. ...

  4. [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. python3 beautifulsoup 模块详解_关于beautifulsoup模块的详细介绍

    这篇文章主要给大家介绍了python中 Beautiful Soup 模块的搜索方法函数. 方法不同类型的过滤参数能够进行不同的过滤,得到想要的结果.文中介绍的非常详细,对大家具有一定的参考价值,需要 ...

  6. python爬虫之bs4模块(超详细)

    python爬虫之bs4模块(超详细) 一.bs4简介 二.使用方法 三.BeautifulSoup四大对象种类 (1)tag (2)NavigableString (3)BeautifulSoup ...

  7. 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签...

    第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象 ...

  8. 【爬虫剑谱】三卷3章 拾遗篇-有关于bs4库中的BeautifulSoup模块使用小结

    关于bs4库中的BeautifulSoup模块在实战后的快速上手小结 一.BeautifulSoup 模块 1.将 Beautiful 对象实例化的两种方法 (1)将本地 HTML 文档转为 Beau ...

  9. python爬虫之使用BeautifulSoup模块抓取500彩票网竞彩足球赛果及赔率

    目录 前言 分析思路 数据储存 代码 结果展示 结语 前言 竞彩足球是目前比较受欢迎的一种体彩彩种,玩法较为灵活多样,赔率可观,今天就来记录一下如何抓取竞彩足球的开奖信息和赔率. 分析思路 我使用的网 ...

最新文章

  1. TypeError: unhashable type: 'dict'
  2. 享元模式 Composite
  3. 详解Python的*args和 **kwargs
  4. Baidu_Location_SDK
  5. MySQL高级 - 案例 - 系统性能优化 - 数据源配置
  6. 实现输入框小数多 自动进位展示,编辑时实际值不变
  7. [Python]使用 lambda 函数
  8. 现代软件工程 其实还是人的问题
  9. 如何删除第一张单页_单页网站-网站建设中独有的风景线
  10. go一个简单的爬虫(豆瓣)
  11. 操作集合的工具类Collections
  12. javaScript 解析 xml
  13. Sharepoint学习笔记---SPList--External List因BCS的Throttling limit 节流限制导致的错误
  14. Bash之正则表达式
  15. 御剑端口扫描工具2020下载
  16. HTML表格、列表、表单
  17. Java猪人刷怪塔_我的世界:经验不够怎么办?MC6大快速升级方法,养鸡也行?...
  18. 中国大学生计算机设计大赛英语,中国大学生计算机设计大赛2018.pdf
  19. 使用Fiddler对手机App抓包
  20. U3D Addressables异步加载资源,创建大物体卡顿解决方案

热门文章

  1. 防雪崩利器:熔断器 Hystrix 的原理与使用
  2. BZOJ1452 [JSOI2009]Count 树状数组
  3. js中的apply()、call() 和 bind()
  4. 关系数据库范式粗略理解
  5. Android4.4源码编译(Ubuntu1204/1404)
  6. [O(N)的我不会]树网的核
  7. BZOJ4241 历史研究(莫队)
  8. merge into语句的使用
  9. jQuery的end()方法使用详解
  10. 关于在线预览word,excel,ppt,pdf的需求处理方法。