beautifulsoup的用法
首先介绍beautifulsoup这个库,因为最开始接触爬虫的时候,就看到大家强力推荐这个库。后来用了下,觉着确实不错。但是程序员嘛,哪能在一个库里闷死,哈哈。
几个库的安装过程就不再累述,参考anaconda。-_-.
后面几个实例,均用这个来测试。
html = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="myclass" name="dromouse"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were <a href="http://example.com/elsie" class="myclass" id="box"><!-- Elsie --></a>, <a href="http://example.com/lacie" class="myclass" id="box1">Lacie</a> and <a href="http://example.com/tillie" class="myclass" id="box2">Tillie</a>; and they lived at the bottom of a well.</p> <p class="story">...</p> """
BeautifulSoup
Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器。例如lxml HTML,lxml XML,html5lib。不过要安装这些库,否则它会使用python的内部标准库。
beautifulsoup的对象创建有两种方式。
1. soup=BeautifulSoup(html) #用变量内容来创建
2. soup=BeautifulSoup('mysite.html') #用本地文件来创建
BeautifulSoup是将HTML转化为一个复杂的树形结构,每个节点都是python对象,有前端基础的同学会知道,类似DOM对象。BeautifulSoup中的对象大致有四种,Tag、NavigableString、BeautifulSoup、Comment。由于我们平时操作大多数是针对一个个标签提取信息,所以我简略的叙述下常用到的Tag对象。
Tag
tag就是HTML的一个个标签。
例如HTML中的 head,title,a,p等等。
在实际操作中,我们会将所需要的标签通过选择器查找出来,然后通过操作Tag对象来获取所需信息。在BeautifulSoup中,常用的findAll()和find()来搜索文档树来获取自己所需的标签。同时,BeautifulSoup也支持CSS语法来搜索,select()方法,返回的类型是list。
ps:
1.findAll()等同于find_all()
2.对前端比较了解的,用select()方法比较顺手。
(1)findAll(name,attrs,recursive,text,**kwargs)
1.name参数可以查找所有名为name的tag,字符串对象会自动忽略。对于name参数,可以传入下列对象。
a)字符串:最简单的过滤器是字符串.在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容,下面的例子用于查找文档中所有的<p>标签.
例: soup.findAll('p') #会返回所有p标签
b)正则表达式:传入的正则表达式作为参数时,BeautifulSoup会通过re.match()来匹配内容。
例: soup.findAll(re.compile('^b'))#默认已导入re#本语句会查找所有b开头的标签,例如:body,b
c)传列表:传入列表时,BeautifulSoup会将所有与列表中任一匹配的元素返回。
例: soup.findAll(['p','title'])
常用的就这3个,还有传方法和传真。
2.keyword参数(如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当作指定名字tag的属性来搜索,如果包含一个名字为 id 的参数,Beautiful Soup会搜索每个tag的”id”属性。当想用class的时候,由于class是python的关键词,不能直接用,可以用class_代替class)
soup.findAll(id='box')#找出id值为box的tag soup.findAll(href=re.compile('baidu'))#href包含‘href’的tag soup.findAll(href=re.compile('baidu'),id='box1)#传入多个参数,找出同时满足两个条件的tag soup.findAll(class_='myclass')#找出class值为myclass的tag,注意下划线不能少 #特殊的参数可以定义字典参数来查找。查找多个参数时,也可以用此方法 soup.findAll(attrs={'class':'myclass','id'='box'})
3.text参数
通过传入text参数可以搜索文档中与字符串内容相同的内容。(不常用)。可传入的与name一样。
实例,略。
4.limit参数
用于限制返回搜索的结果数,当搜索的达到limit限制时,就停止搜索返回搜索结果。
ps:find()相当于findAll()中limit=1的时候。
实例,略
5)recursive参数
recursive的默认参数为True,BeautifulSoup会查找所有后代节点,而只想搜索子节点时,可设置参数为False。
实例,略。
find()
find()相当于findAll()中limit=1的时候,不过find()返回的是结果,findAll()返回的是一个列表。
CSS选择器
beautifulsoup支持CSS语法的选择器来查找所需要的标签。
select(CSS选择器)例: soup.select('.myclass #box') #后代选择器 soup.select('head>title') #子选择器 soup.select('div+p') #相邻兄弟选择器 soup.select('div~p’) #后续兄弟选择器
同时还可以加入属性查找。
soup.select('.myclass a[id="box"]')
select()方法返回的是列表形式。
以上差不多就是BeautifulSoup常用的功能
beautifulsoup的用法相关推荐
- BeautifulSoup库用法总结
0.写在前面 在python的爬虫中,经常需要用到强大的beautifulsoup库,如之前写的股票数据的爬取中就用到了它.在这里,将详细总结beautifulsoup的用法,来巩固相关知识.以下便是 ...
- python bs4模块_python爬虫之Beautifulsoup模块用法详解
什么是beautifulsoup: 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.(官方) beautifulsoup是 ...
- Python笔记-BeautifulSoup基本用法(通过标签及class定位元素)
如下: 将html文件下载后,使用BeauifulSoup读取文件,并且使用html.parser tmp_soup.select里面的参数为: div标签中class中带有listbg 下面 spa ...
- python爬虫库的常见用法_$python爬虫系列(2)—— requests和BeautifulSoup库的基本用法...
本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...
- python爬虫系列—— requests和BeautifulSoup库的基本用法
本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...
- python爬虫系列(2)—— requests和BeautifulSoup库的基本用法
本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...
- python BeautifulSoup的简单使用
官网:https://www.crummy.com/software/BeautifulSoup/bs4/doc/ 参考:https://www.cnblogs.com/yupeng/p/336203 ...
- BeautifulSoup安装及其应用
2019独角兽企业重金招聘Python工程师标准>>> BeautifulSoup 安装及其使用 BeautifulSoup 是个好东东. 官网见这里: http://www.cru ...
- [python知识] 爬虫知识之BeautifulSoup库安装及简单介绍
一. 前言 在前面的几篇文章中我介绍了如何通过Python分析源代码来爬取博客.维基百科InfoBox和图片,其文章链接如下: [python学习] 简单爬取维基百科程 ...
最新文章
- 一步一步 Mac OS X 与 Windows 7 双系统共存 的“黑苹果” 电脑 安装 入门
- SecureCRT快捷键
- Response.ContentType 详细列表
- 玛莎拉蒂“跨界”腾讯车联打造车载互联系统,新Ghibli “触电新生”
- hypermesh安装包百度云_HYPERMESH11.0 64bt软件
- Struts2 xml配置
- 怎么用Excel来批量生成SQL语句
- mysql 连接 互联网_互联网技术分享社区 MySQL字符串连接函数
- iOS -- tableView截取长图 或者 UIScrollView截取长图 (Swift代码)
- Modelica学习笔记1
- bzoj 4816 [Sdoi2017]数字表格——反演
- 使用C加加实现计算器功能。可以实现加减乘除。需要用到内联。函数重载。new运算符。缺省参数
- suse linux 11 xdm图形化,suse xdm 设置
- 新买的硬盘怎么装系统
- idea突然打不开了
- c语言窄字符转换为宽字符,将窄字符串转换为宽字符串
- 12天背诵楞严咒的技巧_楞严咒快速背诵方法,我试了n种,最后选择了这些土方法...
- c语言检测tft是否有触摸,带有触摸数据(包括各种历史记录的全套数据)的2.4英寸TFT_LCD...
- 【转载】通过 FUNCTION NET_DUE_DATE_GET 得到MIRO付款日期(DUE ON DATE)
- win10 为什么可以秒开机?(附实战源码,真机操作)
热门文章
- [pyecharts学习笔记]——页面组件 Page(顺序多图,将多个图将汇总到一个页面)
- Docker的安装与基本使用(一)---使用Docker的前提条件和三要素
- DC1+2: Tcl与Design Compiler (一二)——前言+DC综合与Tcl语法结构概述+DCT/DCG+wireloadmodel+Comments
- Vue项目关闭格式检查命令
- PPT基础(二十二)裁剪图片
- ADI Blackfin DSP处理器-BF533的开发详解60:DSP控制ADXL345三轴加速度传感器-电子水平仪(含源码)
- getResource()的几种路径方式
- 定时器:setTimeout()
- sklearn.svm中LinearSVR(svm线性回归)、LinearSVC(svm线性分类)与SVC(svm分类)、SVR(svm回归)之间的区别
- 云服务器 文件管理,云服务器文件管理工具