《数据采集与预处理》课件8:静态网页爬取模块-数据解析beautifulsoap_第1页
《数据采集与预处理》课件8:静态网页爬取模块-数据解析beautifulsoap_第2页
《数据采集与预处理》课件8:静态网页爬取模块-数据解析beautifulsoap_第3页
《数据采集与预处理》课件8:静态网页爬取模块-数据解析beautifulsoap_第4页
《数据采集与预处理》课件8:静态网页爬取模块-数据解析beautifulsoap_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据解析beautifulsoup了解BeautifulSoup安装方法理解BeautifulSoup的3种选择器的思路熟练应用CSS选择器教学目标1BeautifulSoup节点选择器静态网页数据采集–数据解析beautifulsoupBeautifulSoup概述2BeautifulSoup方法(标准)选择器34BeautifulSoupcss选择器BeautifulSoup概述BeautifulSoup翻译成中文就是“美丽的汤”,这个奇特的名字来源于《爱丽丝梦游仙境》。BeautifulSoup是一个灵活方便的网页解析第三方Python库,处理效率高,易学易用,支持多种解析器。该模块可以解析网页,并提供定位内容的便捷接口。BeautifulSoup提供一些简单的、Python式的函数用来处理导航、搜索、修改分析树等功能;BeautifulSoup是一个工具箱,通过解析文档为用户提供需要抓取的数据,简单、方便实现;BeautifulSoup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码,无需考虑编码方式;BeautifulSoup为用户灵活地提供不同的解析策略或强劲的速度BeautifulSoup概述由于BeautifulSoup不是标准Python标准库,需要安装。1.安装BeautifulSoup目前,BeautifulSoup的最新版本是4.x版本,之前的版本已经停止开发。安装BeautifulSoup最新版本:pipinstallbeautifulsoup4BeautifulSoup库安装后,可在命令行下进行测试,具体测试指令如下:frombs4importBeautifulSoupsoup=BeautifulSoup('<p>Hello</p>','lxml')print(soup.p.string)输入以上内容,出现以下内容,说明BeautifulSoup库安装成功,具体如下图。BeautifulSoup概述2.解析器BeautifulSoup解析需要依赖解析器,除了支持Python标准库中的HTML解析器,还支持一些第三方解析器。BeautifulSoup支持的解析器如下:解析器使用方法优点劣势Python标准库BeautifulSoup(markup,”html.parser”)Python的内置标准库、执行速度适中、文档容错能力强Python2.7.3及Python3.2.2之前的版本文档容错能力差lxmlHTML解析器BeautifulSoup(markup,”lxml”)速度快、文档容错能力强需要安装C语言库lxmlXML解析器BeautifulSoup(markup,”xml”)速度快、唯一支持XML的解析器需要安装C语言库html5libBeautifulSoup(markup,”html5lib”)最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档速度慢、不依赖外部扩展lxml解析器有解析HTML和XML的功能,且速度快,容错能力强,官方推荐使用lxml解析器。1BeautifulSoup节点选择器静态网页数据采集–数据解析beautifulsoupBeautifulSoup概述2BeautifulSoup方法选择器34BeautifulSoupcss选择器BeautifulSoup基本用法BeautifulSoup对象通过BeautifulSoup类的基本元素来提取元素内容,常见基本元素如下表所示:基本元素描述Tag标签,最基本的信息组织单元,分别用<>和</>标明开头和结尾Name标签的名字,<p>...</p>的名字是'p',格式:<tag>.nameAttributes标签的属性,字典形式组织,格式:<tag>.attrsNavigableString标签内非属性字符串,<>...</>中字符串,格式:<tag>.stringComment标签内字符串的注释部分,一种特殊的Comment类型BeautifulSoup基本用法frombs4importBeautifulSouphtml='''<ulclass="clearfixlavalamp">

<divclass="lavalamp-object"id="nav"></div>

<liclass="navitem-indexcurrent"><ahref="/index"class=“red”>首页</a></li>

<liclass="lavalamp-item"><ahref="/guonei">国内</a></li>

<liclass="lavalamp-item"><ahref="/guoji">国际</a></li>

<liclass="lavalamp-item"><ahref="/mil">军事</a></li>

<liclass="lavalamp-item"><ahref="/finance">财经</a></li>

<liclass="lavalamp-item"><ahref="/ent">娱乐</a></li>

<liclass="lavalamp-item"><ahref="/sports">体育</a></li>

<liclass="lavalamp-item"><ahref="/internet">互联网</a></li>

</ul>''‘soup=BeautifulSoup(html,"html.parser")下面选取百度新闻导航栏的部分结构作为例子。

其中语句,soup=BeautifulSoup(html,"html.parser")首先将html文本内容传入构造方法,得到一个文档对象Soup。第一个参数为html文本内容。html.parser为BeautifulSoup的解析器。1、获得标签

使用“soup.标签名”的形式可以获取标签内容,如果存在多个同样的标签,返回的内容是第一个标签内容。print(soup.li)打印输出了li标签的全部内容。变量html的文本中包含有多个li标签,只是输出第一个标签。2、标签内的内容

如果想要获取标签中的文本内容,如a标签的文本“首页”两个字。在标签后增加“.string”,就可获取标签内的文本。BeautifulSoup基本用法print(soup.li)

Out:<liclass="navitem-indexcurrent"><ahref="/">首页</a></li>print(soup.li.string)

Out:首页2、标签内的内容

也可使用嵌套的方式获取。3、标签的属性

利用attrs属性获取节点属性,具体代码如下:BeautifulSoup基本用法print(soup.li.a.string)

Out:首页print(soup.li.a.attrs)

print(soup.li.a.attrs['href'])Out:{'href':'/index','class':['red']}/index此处可见,attrs返回结果是字典形式:选择节点的所有属性和属性值组合成一个字典;若要获取name属性,通过attrs['name']即可获得。获取属性还有另一种实现方式:在节点元素后面加中括号,传入属性名即可,比如soup.li.a.['href']。4、关联选择做选择的时候,很多情况不能一步到位,需要先选择一个节点元素,然后以此节点为基准再选择它的子节点、父节点、兄弟节点等,这种情况称为关联选择。常选择内容如下:子节点和孙节点contents:获取所有的子节点,返回的是一个列表;children

:获取所有的子节点,返回的是一个生成器类型;descendants:获取所有的子孙节点。父节点和祖父节点parent:获取某个元素的父节点;parents:获取所有的祖节点,返回的是一个生成器类型。BeautifulSoup基本用法allli=soup.ul.children

forliinallli:

print(li)BeautifulSoup基本用法兄弟节点next_sibling:获取节点的下一个兄弟节点;previous_sibling:获取节点的上一个兄弟节点;next_siblings:获取节点后面所有的兄弟节点,返回类型是生产器;previous_siblings:获取节点前面所有的兄弟节点,返回类型是生产器。1BeautifulSoup基本用法静态网页数据采集–数据解析beautifulsoupBeautifulSoup概述2BeautifulSoup方法选择器34BeautifulSoupcss选择器BeautifulSoup方法选择器上节主要学习通过属性来选择信息,本节主要学习通过一些查询方法进行选择。BeautifulSoup提供的常用函数如下表所示:方法描述find_all()返回所有符合条件的元素find()返回第一个匹配的元素find_parents()/find_parent()返回所有祖先节点/返回直接的父节点find_next_siblings()/find_next_sibling()返回后面所有的兄弟节点/返回后面第一个兄弟节点find_previous_siblings()/find_previous_sibling()返回前面所有的兄弟节点/返回前面第一个兄弟节点find_all_next()/find_next()返回节点后所有符合条件的节点/返回第一个符合条件的节点BeautifulSoup方法选择器find_all()方法,就是查询所有符合条件的元素,给它传入一些属性或文本,可以得到符合条件的元素。该方法用法如下:主要参数解释如下:

name:依据节点来查询元素;attrs:依据一些属性来查询;text:可用匹配节点的文本来查询。find_all(name=None,attrs={},recursive=True,text=None,limit=None,**kwargs)BeautifulSoup方法选择器1、通过find_all查找标签find_all方法是BeautifulSoup的常用方法搜索当前标签的所有子节点,并判断是否符合过滤器的条件。例如,获取所有的li标签,代码如下:

print(soup.find_all(name=“li”))或print(soup.find_all(“li”))也可使用soup.findAll("li")或简写为soup("li")。返回的数据类型为列表,如需要获取指定的列表项目,通过增加索引获取,注意索引的切片是从0开始。print(soup("li")[3])#获取第4个liOut:<liclass="lavalamp-item"><ahref="/mil">军事</a></li>BeautifulSoup方法选择器2、通过find_all查找属性

如果想通过属性来进行查找,可使用键/值对的形式来传递参数。例如查找li标签中属性class为lavalamp-item的第四个li,代码如下soup.find_all(attrs={‘class’:‘

lavalamp-item’})[3]#完整写法

这里注意,class_必须带有下划线,因为class是python的语法关键字。如去掉下划线会出现语法错误。

BeautifulSoup也可按照Id来检索,使用方式和按照Class方式查找雷同。print(soup(id='xxx'))#xxx为具体的id值print(soup(class_=‘lavalamp-item’)[3])#简写Out:<liclass="lavalamp-item"><ahref="/finance">财经</a></li>BeautifulSoup方法选择器3、通过find_all查找文本

通过text来查询节点文本,具体代码如下:可以看到代码实现流程如下:1).BeautifulSoup对象实例化;2).调用find_all()方法,传入text参数,返回节点文本列表。此处有两个a节点,其内容包含文本信息。在find_all()方法中传入text参数,参数为正则表达式soup=BeautifulSoup(html,'lxml')

print(soup.find_all(text=pile('国')))#利用正则表达式Out:['国内','国际']BeautifulSoup方法选择器Get方法获得属性如果想要获取标签的属性,可以使用“标签[属性]”或“标签.get(属性)”的方式获取属性值。推荐使用“标签.get(属性)”的方式,可有效的进行异常处理。print(soup.li.a.get("href"))

Out:/indexBeautifulSoup方法选择器get_text方法获得标签的文本内容如果只想得到标签中包含的文本内容,前面讲过使用string属性,也可以使用get_text()方法。这个方法获取标签中的包含的所有文本内容(包括子孙节点的文本内容)并将结果返回字符串。例如:获取ul标签下所有的文本内容。print(soup('ul')[0].get_text())Out:首页国内国际军事需要注意的是get_text()前选取的对象不能为列表等集合类型。1BeautifulSoup基本用法静态网页数据采集–数据解析beautifulsoupBeautifulSoup概述2BeautifulSoup标准选择器34BeautifulSoupcss选择器BeautifulSoupcss选择器BeautifulSoup支持大部分的CSS选择器,在Tag或BeautifulSoup对象的.select()方法中传入字符串参数。字符串参数基本上遵照CSS选择器的语法格式。使用CSS选择器使用难度低,但需要注意使用的是select方法返回的是列表类型。id选择器使用#作为前缀类选择器使用点(.)作为前缀元素选择器直接使用标签的名称属性选择器实际应用中多为组合选择器,就是多种选择器使用的组合形式。如缺少相关知识可使用Chrome浏览器的开发者工具,选中元素后鼠标右键,然后选择“copy”,再次选择“copyselector”生成CSS选择器。BeautifulSoupcss选择器简单使用下CSS选择器。例如,选择id为nav的div标签print(soup.select("#nav"))

Out:[<divclass="lavalamp-object"id="nav"></div>]需要注意的是无论返回结果是一个或者多个,返回类型都为列表类型。print(soup.select(“.lavalamp-item>a”)[0].text)#取标签内的文本Out:国内

除了获取标签内的文本外,经常需要获取标签的属性值,可使用attrs方法。例如获取当前html中第一个div的id值,代码如下print(soup.select("div")[0].attrs["id"])Out:nav

案例讲解(陕西省政府采购网)【任务描述】

爬取陕西省政府采购网的监督检查新闻,爬取信息包括新闻标题、链接地址、发布时间。爬取后的数据保存在csv中。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论