课件0903-Beautifulsoup4库的使用_第1页
课件0903-Beautifulsoup4库的使用_第2页
课件0903-Beautifulsoup4库的使用_第3页
课件0903-Beautifulsoup4库的使用_第4页
课件0903-Beautifulsoup4库的使用_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

Beautifulsoup4库的使用——网络爬虫库的应用制作:教材编写团队出版社:机械工业出版社《Python编程基础与应用》配套课件本课件为《Python编程基础与应用(第2版)》配套教学资源,由编写团队精心打造。为便于教学使用,团队同步提供了丰富的辅助材料,涵盖微课视频、教学课件、实训手册、习题答案、课程标准及程序源代码等。同时,教材配套超星教学示范包,支持一键克隆为网络在线课程,助力高效开展线上线下混合式教学。欢迎联系出版方订购使用。

书名:《Python编程基础与应用(第2版)》出版社:机械工业出版社主编:蓝永健、陈冬冬副主编:蔡德琛、朱海鑫、邓爱玲+contents目录Beautifulsoup4的安装和简介Beautifulsoup4的使用和示范Beautifulsoup4的安装和简介01Beautifulsoup4的简介BeautifulSoup4(简称BS4)是一个Python库,专门用于从HTML和XML文档中提取数据。虽然requests库可以获取网页内容。比如,requests的局限性只能获取原始文本,requests获取的response.text是完整的HTML文档字符串,无法直接定位和提取特定元素的内容。要高效提取其中的结构化数据,BeautifulSoup4几乎是必不可少的工具Beautifulsoup4的简介HTML文档本身是结构化的文本,有一定的规则,通过它的结构可以简化信息提取。于是,就有了lxml、pyquery、BeautifulSoup等网页信息提取库。一般我们会用这些库来提取网页信息。lxml有很高的解析效率,支持xPath语法(一种可以在HTML中查找信息的规则语法);pyquery得名于jQuery(知名的前端js库),可以用类似jQuery的语法解析网页。BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。Beautifulsoup4的解析器解析器特点安装方式lxml速度快,容错能力强pipinstalllxmlhtml.parserPython内置,无需额外安装无需安装html5lib容错性最好,速度最慢pipinstallhtml5libBeautifulsoup4的安装BeautifulSoup会帮你节省很多的工作时间。它的安装方法很简单,可以直接使用PIP进行安装:

要注意,包名是beautifulsoup4。如果不加上4,会是老版本,它是为了兼容性而存在,目前已不推荐使用。有关它的更多介绍请访问网站https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/或者/software/BeautifulSoup/。#从国外镜像安装pipinstallbeautifulsoup4#从国内清华镜像源安装pipinstallbeautifulsoup4-i/pypi/web/simpleBeautifulsoup4的安装安装解析器安装解析器是beautifulsoup4应用中很重要的一部分。beautifulsoup4支持Python标准库中的HTML解析器,还支持一些第三方的解析器,比如lxml和html5lib。推荐使用lxml作为解析器,因为它的效率更高。它的安装方法很简单,可以直接使用PIP进行安装:#从国外镜像安装pipinstalllxmlpipinstallhtml5libBeautifulSoup4的常用方法方法/属性描述返回类型初始化BeautifulSoup(html,'parser')创建BeautifulSoup对象BeautifulSoup查找元素find(name,attrs,recursive,string,**kwargs)查找第一个匹配元素Tag/Nonefind_all(name,attrs,recursive,string,limit,**kwargs)查找所有匹配元素ResultSetselect(css_selector)CSS选择器查找listselect_one(css_selector)CSS选择器查找单个元素Tag/NoneBeautifulSoup4的常用方法方法/属性描述返回类型导航.parent父节点PageElement.parents所有祖先节点generator.next_sibling下一个兄弟节点PageElement.previous_sibling上一个兄弟节点PageElement.contents直接子节点列表list.children直接子节点迭代器generator.descendants所有后代节点迭代器generatorBeautifulSoup4的常用方法方法/属性描述返回类型提取内容.text

/

.get_text()获取元素所有文本内容str.string获取单个字符串内容NavigableString.strings获取所有字符串内容生成器generator.stripped_strings获取去除空白的字符串生成器generator属性操作['attr']

/

.get('attr')获取属性值str.attrs获取所有属性字典dict.has_attr('attr')检查是否有某属性bool详细使用示例——基本用法frombs4importBeautifulSoupimportrequests#获取网页内容url=""response=requests.get(url)html=response.text#创建BeautifulSoup对象soup=BeautifulSoup(html,'lxml')#推荐使用lxml解析器#获取标题title=soup.title.textprint(f"网页标题:{title}")#获取所有链接links=[a['href']forainsoup.find_all('a',href=True)]print(f"前5个链接:{links[:5]}")详细使用示例——查找元素#查找第一个div元素first_div=soup.find('div')print(first_div)#查找class为'header'的所有元素headers=soup.find_all(class_='header')print(f"找到{len(headers)}个header元素")#查找id为'main'的divmain_div=soup.find('div',id='main')print(main_div)#使用CSS选择器articles=soup.select('div.article')#选择所有class为article的divtitles=[h2.textforh2insoup.select('h2.title')]#选择所有class为title的h2详细使用示例——导航文档树#获取父元素parent=first_div.parentprint(f"父元素标签名:{}")#遍历子元素print("直接子元素:")forchildinfirst_div.children:if:#过滤掉字符串节点

print()#遍历所有后代元素print("\n所有后代元素标签:")fordescendantinfirst_div.descendants:ifhasattr(descendant,'name'):print()详细使用示例——提取内容#获取元素文本print(first_div.get_text())#获取去除空白的文本clean_text=''.join(first_div.stripped_strings)print(clean_text)#获取特定属性iffirst_div.has_attr('class'):print(f"div的class:{first_div['class']}")#获取所有属性print(f"div的所有属性:{first_div.attrs}")总结BeautifulSoup4提供了强大而灵活的方式来解析和提取HTML/XML文档中的数据。通过掌握其核心方法,你可以轻松应对各种网页抓取需求。关键点包括:选择合适的解析器(推荐lxml)灵活使用find/find_all和CSS选择器熟悉文档树的导航方法正确处理文本和属性提取结合requests或其他HTTP库使用对于更复杂的爬虫项目,可以考虑将BeautifulSoup4与Scrapy或其他框架结合使用,但BeautifulSoup4因其简单易用,仍然是大多数Python爬虫开发者的首选工具。Beautifulsoup4的使用和示范01范例11-6使用beautifulsoup4进行简单的网页解析有一段百度新闻首页的源代码,通过beautifulsoup4解析,把一些信息提取出来。因为HTML源代码比较复杂,这里使用了三引号把源代码引用。调用了lxml解析器。frombs4importBeautifulSoup#一段HTML代码baiduhtml="""<htmlclass="expanded"><head><!--STATUSOK--><metahttp-equiv=Content-Typecontent="text/html;charset=utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=Edge,chrome=1"><metacharset="utf-8"/><title>百度新闻——海量中文资讯平台</title><metaname="description"content="百度新闻是包含海量资讯的新闻服务平台,真实反映每时每刻的新闻热点。您可以搜索新闻事件、热点话题、人物动态、产品资讯等,快速了解它们的最新进展。">"""范例11-6使用beautifulsoup4进行简单的网页解析#创建BeautifulSoup对象soup=BeautifulSoup(baiduhtml,'lxml')#获取title的整个标签和它的文字内容print('01:',soup.title,soup.title.string)#获取指定标签,获取指定标签里面的内容print('02:',soup('title'),soup('title')[0].string)#获取指定标签也可以写成这样#获取meta标签的指定内容或者首次出现整个meta标签print('03:',soup.meta.get('content'))#获取指定标签的属性print('04:',soup.meta)#获取第一个标签(多个只取第一个)print('05:',soup.find('meta'))#获取第一个标签,结果和上面一样#获取指定属性的meta标签和它的属性内容print('06:',soup.find('meta',attrs={'name':'description'}))#获取第一个标签,根据属性过滤获取print('07:',soup.find('meta',attrs={'name':'description'}).get('content'))#通过get()可以指定属性获取内容范例11-6使用beautifulsoup4进行简单的网页解析它的结果如下01:<title>百度新闻——海量中文资讯平台</title>百度新闻——海量中文资讯平台02:[<title>百度新闻——海量中文资讯平台</title>]百度新闻——海量中文资讯平台03:text/html;charset=utf-804:<metacontent="text/html;charset=utf-8"http-equiv="Content-Type"/>05:<metacontent="text/html;charset=utf-8"http-equiv="Content-Type"/>06:<metacontent="百度新闻是包含海量资讯的新闻服务平台,真实反映每时每刻的新闻热点。您可以搜索新闻事件、热点话题、人物动态、产品资讯等,快速了解它们的最新进展。"name="description"/>07:百度新闻是包含海量资讯的新闻服务平台,真实反映每时每刻的新闻热点。您可以搜索新闻事件、热点话题、人物动态、产品资讯等,快速了解它们的最新进展。以上代码范例直接解析指定的标签,或者根据标签的属性参数进行解析。比如:soup.meta即是获取获取第一个meta标签。soup.meta.get('content')即是获取meta标签中的属性content。soup.find('meta',attrs={'name':'description'})是调用find()的方法,它可以输入详细的参数。soup.find('meta',attrs={'name':'description'}).get('content')调用了find()的方法,再调用get()指定某一个属性,可以获取指定属性的内容。比如这里就获取了content属性的内容。范例11-7使用beautifulsoup4的select()抓取导航有一段百度新闻首页的源代码,通过beautifulsoup4的select()方法把网站的导航URL和导航文字解析出来。在BeautifulSoup对象的.select()方法中传入字符串参数,即可使用CSS选择器的语法找到tag。frombs4importBeautifulSouphtmlstr="""<divid="channel-all"class="channel-allclearfix"><divclass="menu-list"><ulclass="clearfix"><liclass="navitem-indexcurrentactive"><ahref="/">首页</a></li><li><ahref="/guonei">国内</a></li><li><ahref="/guoji">国际</a></li><li><ahref="/mil">军事</a></li><li><ahref="/finance">财经</a></li><li><ahref="/ent">娱乐</a></li><li><ahref="/sports">体育</a></li><li><ahref="/internet">互联网</a></li><li><ahref="/tech">科技</a></li><li><ahref="/game">游戏</a></li><li><ahref="/lady">女人</a></li><li><ahref="/auto">汽车</a></li><li><ahref="/house">房产</a></li></ul></div><iclass="slogan"></i></div>"""范例11-7使用beautifulsoup4的select()抓取导航有一段百度新闻首页的源代码,通过beautifulsoup4的select()方法把网站的导航URL和导航文字解析出来。在BeautifulSoup对象的.select()方法中传入字符串参数,即可使用CSS选择器的语法找到tag。#创建BeautifulSoup对象soup=BeautifulSoup(htmlstr,'lxml')print('抓取导航,实现方法1')foriteminsoup.select('div#channel-alla'):print(item.get('href'),item.string)#print('抓取导航,实现方法2')#foriteminsoup.select('ul.clearfixa'):#print(item.get('href'),item.string)通过观察可以发现整个导航代码都在标签id="channel-all"的div中,这一个div下面出现了a标签,它里面有导航的URL和导航的文字。通过遍历循环soup.select('div#channel-alla')的方法可以找到a标签。找到a标签后,再通过get()指定href属性可以获取它的URL,再通过string方法可以直接获取它的内容,即a标签中的导航文字。范例11-7使用beautifulsoup4的select()抓取导航它的结果如下抓取导航,实现方法1/首页/guonei国内/guoji国际/mil军事/finance财经/ent娱乐/sports体育/internet互联网/tech科技/game游戏/lady女人/auto汽车/house房产在实际项目中,要精准分析网页结构的特征,找准网页HTML标签、HTML的ID属性和CSS的名称属性这些代码,可以快速地提供和解析网页。示例1:抓取新闻标题和链接#假设新闻结构为<divclass="news-item"><h2><ahref="...">标题</a></h2></div>news_items=soup.select('div.news-item')news_data=[]foriteminnews_items:title=item.h2.a.text.strip()link=item.h2.a['href']news_data.append({'title':title,'link':link})print(f"抓取到{len(news_data)}条新闻")示例2:提取表格数据#提取HTML表格数据table=soup.find('table')table_data

温馨提示

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

评论

0/150

提交评论