当前位置: 首页 > news >正文

吉林网站建设公司展厅装修效果图

吉林网站建设,公司展厅装修效果图,电子商务网站保密协议,网站和新媒体建设管理办法BeautifulSoup 的引入 我们学习了正则表达式的相关用法#xff0c;但是一旦正则写的有问题#xff0c;可能得到的就不是我们想要的结果了#xff0c;而且对于一个网页来说#xff0c;都有一定的特殊的结构和层级关系#xff0c;而且很多标签都有 id 或 class 来对作区分但是一旦正则写的有问题可能得到的就不是我们想要的结果了而且对于一个网页来说都有一定的特殊的结构和层级关系而且很多标签都有 id 或 class 来对作区分所以我们借助于它们的结构和属性来提取不也是可以的吗 所以这一节我们就介绍一个强大的解析工具叫做 BeautiSoup它就是借助网页的结构和属性等特性来解析网页的工具有了它我们不用再去写一些复杂的正则只需要简单的几条语句就可以完成网页中某个元素的提取。 废话不多说接下来我们就来感受一下 BeautifulSoup 的强大之处吧。 BeautifulSoup 简介 简单来说BeautifulSoup 就是 Python 的一个 HTML 或 XML 的解析库我们可以用它来方便地从网页中提取数据官方的解释如下 BeautifulSoup 提供一些简单的、python 式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱通过解析文档为用户提供需要抓取的数据因为简单所以不需要多少代码就可以写出一个完整的应用程序。BeautifulSoup 自动将输入文档转换为 Unicode 编码输出文档转换为 utf-8 编码。你不需要考虑编码方式除非文档没有指定一个编码方式这时你仅仅需要说明一下原始编码方式就可以了。BeautifulSoup 已成为和 lxml、html6lib 一样出色的 python 解释器为用户灵活地提供不同的解析策略或强劲的速度。 所以说利用它我们可以省去很多繁琐的提取工作提高解析效率。 BeautifulSoup 的安装 使用之前我们当然需要首先说明一下它的安装方式。目前 BeautifulSoup 的最新版本是 4.x 版本之前的版本已经停止开发了推荐使用 pip 来安装安装命令如下 pip install beautifulsoup4 好安装完成之后可以验证一下写一段 Python 程序试验一下。 from bs4 import BeautifulSoup soup  BeautifulSoup(pHello/p, html.parser)print(soup.p.string) 运行结果 Hello 如果没有报错则证明安装没有问题。 解析器 BeautifulSoup 在解析的时候实际上是依赖于解析器的它除了支持 Python 标准库中的 HTML 解析器还支持一些第三方的解析器比如 lxml下面我们对 BeautifulSoup 支持的解析器及它们的一些优缺点做一个简单的对比。 解析器使用方法优势劣势  Python 标准库 BeautifulSoup (markup, html.parser) Python 的内置标准库、执行速度适中 、文档容错能力强 Python 2.7.3 or 3.2.2) 前的版本中文容错能力差  lxml HTML 解析器 BeautifulSoup (markup, lxml) 速度快、文档容错能力强需要安装 C 语言库  lxml XML 解析器 BeautifulSoup (markup, xml) 速度快、唯一支持 XML 的解析器需要安装 C 语言库  html5libBeautifulSoup (markup, html5lib) 最好的容错性、以浏览器的方式解析文档、生成 HTML5 格式的文档速度慢、不依赖外部扩展  所以通过以上对比可以看出lxml 这个解析器有解析 HTML 和 XML 的功能而且速度快容错能力强所以推荐使用这个库来进行解析但是这里的劣势是必须安装一个 C 语言库它叫做 lxml我们在这里依然使用 pip 安装即可命令如下 pip3 install lxml 安装完成之后我们就可以使用 lxml 这个解析器来解析了在初始化的时候我们可以把第二个参数改为 lxml如下 from bs4 import BeautifulSoup soup  BeautifulSoup(pHello/p, lxml) print(soup.p.string) 运行结果是完全一致的。 基本使用 下面我们首先用一个实例来感受一下 BeautifulSoup 的基本使用 html  htmlheadtitleThe Dormouses story/title/headbodyp classtitle namedromousebThe Dormouse s story/b/pp classstoryOnce upon a time there were three little sisters; and their names werea hrefhttp ://example.com/elsie classsister idlink1!-- Elsie --/a,a hrefhttp://example.com/lacie classsister  idlink2Lacie/a anda hrefhttp://example.com/tillie classsister idlink3Tillie/a;and they lived at the  bottom of a well./pp classstory.../p from bs4 import BeautifulSoup soup  BeautifulSoup(html, lxml) # lxml写成html.parser也可以同样的效果都是解析器 print(soup.prettify()) print#*30 print(soup.title.string) 运行结果 htmlheadtitleThe Dormouses story/title/headbodyp classtitle namedromousebThe Dormouse s story/b/pp classstoryOnce upon a time there were three little sisters; and their names werea hrefhttp : classsister elsie example.com idlink1!-- Elsie --,a hrefhttp: classsister example.com idlink2 lacieLacieanda hrefhttp: classsister example.com idlink3 tillieTillie;and they lived at the  bottom of a well.p classstory.../p classstory/a hrefhttp:/a hrefhttp:/a hrefhttp/p classstory/body /html ############################## The Dormouses story首先我们声明了一个变量 html它是一个 HTML 字符串但是注意到它并不是一个完整的 HTML 字符串body 和 html 标签都没有闭合但是我们将它当作第一个参数传给 BeautifulSoup 对象第二个参数传入的是解析器的类型在这里我们使用 lxml这样就完成了 BeaufulSoup 对象的初始化将它赋值给 soup 这个变量。 那么接下来我们就可以通过调用 soup 的各个方法和属性对这串 HTML 代码解析了。 我们首先调用了 prettify () 方法这个方法可以把要解析的字符串以标准的缩进格式输出在这里注意到输出结果里面包含了 /body 和 /html 标签也就是说对于不标准的 HTML 字符串 BeautifulSoup 可以自动更正格式这一步实际上不是由 prettify () 方法做的这个更正实际上在初始化 BeautifulSoup 时就完成了。 然后我们调用了 soup.title.string这个实际上是输出了 HTML 中 title 标签的文本内容。所以 soup.title 就可以选择出 HTML 中的 title 标签再调用 string 属性就可以得到里面的文本了所以我们就可以通过简单地调用几个属性就可以完成文本的提取了是不是非常方便 标签选择器 刚才我们选择元素的时候直接通过调用标签的名称就可以选择节点元素了然后再调用 string 属性就可以得到标签内的文本了这种选择方式速度非常快如果单个标签结构话层次非常清晰可以选用这种方式来解析。 选择元素 下面我们再用一个例子详细说明一下它的选择方法。 html  htmlheadtitleThe Dormouses story/title/headbodyp classtitle namedromousebThe Dormouse s story/b/pp classstoryOnce upon a time there were three little sisters; and their names werea hrefhttp: //example.com/elsie classsister idlink1!-- Elsie --/a,a hrefhttp://example.com/lacie classsisteridlink2Lacie/a anda hrefhttp://example.com/tillie classsister idlink3Tillie/a;and they lived at the bottom of a well./pp classstory.../pfrom bs4 import BeautifulSoupsoup  BeautifulSoup(html, lxml)print(soup.title)print(type(soup.title))print(soup.title.string)print(soup.head)print(soup.p) 运行结果 titleThe Dormouses story/title class bs4.element.Tag The Dormouses story headtitleThe Dormouses story/title/head p classtitle namedromousebThe Dormouses story/b/p 在这里我们依然选用了刚才的 HTML 代码我们首先打印输出了 title 标签的选择结果输出结果正是 title 标签加里面的文字内容。接下来输出了它的类型是 bs4.element.Tag 类型这是 BeautifulSoup 中的一个重要的数据结构经过选择器选择之后选择结果都是这种 Tag 类型它具有一些属性比如 string 属性调用 Tag 的 string 属性就可以得到节点的文本内容了所以接下来的输出结果正是节点的文本内容。 接下来我们又尝试选择了 head 标签结果也是标签加其内部的所有内容再接下来选择了 p 标签不过这次情况比较特殊我们发现结果是第一个 p 标签的内容后面的几个 p 标签并没有选择到也就是说当有多个标签时这种选择方式只会选择到第一个匹配的标签其他的后面的标签都会忽略。 提取信息: 在上面我们演示了调用 string 属性来获取文本的值那我们要获取标签属性值怎么办呢获取标签名怎么办呢下面我们来统一梳理一下信息的提取方式 获取名称: 可以利用 name 属性来获取标签的名称。还是以上面的文本为例我们选取 title 标签然后调用 name 属性就可以得到标签名称。 print(soup.title.name) 运行结果 title 属性获取: 每个标签可能有多个属性比如 idclass 等等我们选择到这个节点元素之后可以调用 attrs 获取所有属性。 print(soup.p.attrs) print(soup.p.attrs[name]) 运行结果 {class: [title], name: dromouse} dromouse BeautifulSoup 案例 基本流程 # 创建BeautifulSoup对象 from bs4 import BeautifulSoup # 根据HTML网页字符创建BeautifulSoup对象soupBeautifulSoup(html_doc, # HTML文档字符串html.parser, # HTML解析器from_encodingutf-8 # HTML文档的编码 ) # 搜索节点find_all,find # 方法find_all(name,attrs,string) # 查找所有标签为a的节点 soup.find_all(a) # 查找所有标签为a链接符合/view/123.htm形式的节点 soup.find_all(a,href/view/123.htm) # 查找所有标签为divclass为abc文字为Python的节点 soup.find_all(div,class_abc,stringPython) 获取疯狂的蚂蚁网站首页的文章 urlhttp://www.crazyant.net import requests rrequests.get(url) if r.status_code!200:raise Exception html_docr.text from bs4 import BeautifulSoup soupBeautifulSoup(html_doc,html.parser) h2_nodessoup.find_all(h2,class_entry-title) for h2_node in h2_nodes:linkh2_node.find(a)print(link[href],link.get_text()) 爬取三国演义小说所有文章 from bs4 import BeautifulSoup import requests headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36} url https://www.shicimingju.com/book/sanguoyanyi.html page_text requests.get(urlurl,headersheaders).content.decode(utf-8) soup BeautifulSoup(page_text,html.parser) li_list soup.select(.book-mulu ul li) fp open(./三国演义小说.txt,w,encodingutf-8)for li in li_list:title li.a.stringdetail_url https://www.shicimingju.comli.a[href]detail_page_text requests.get(urldetail_url,headersheaders).content.decode(utf-8)detail_soup BeautifulSoup(detail_page_text, html.parser)div_tag detail_soup.find(div,class_chapter_content)content div_tag.textfp.write(\n title : content \n)print(title,爬取成功)
http://www.yayakq.cn/news/5026/

相关文章:

  • 网站建设方案标书深圳公司注册登记中心
  • 怎么做网站自动响应那个网站做玉石最专业
  • 网盘网站建设设计专业自学网站
  • 肃宁县网站建设公司万网是什么网站
  • 怎么评价网站做的好坏个人网站名可以和别人一样吗
  • 网站开发询价表模板下载网站系统怎么做
  • wordpress有识图插件长沙谷歌优化
  • 网站后台维护一般要怎么做2345小游戏
  • 做百度网站那家好wordpress 自定义 分类
  • 怎么样自己做最简单的网站潍坊企业建站系统
  • 金华网站建设公司哪家好vs网站制作教程
  • 福建省建设职业管理中心网站小型办公室网络组建
  • 中国建筑官网首页seo线下培训课程
  • 绮思网站建设qswoo做 理财网站好
  • 网站开发和前端和数据媒体打开国外网站很慢
  • 深圳微商城网站设计制作wordpress 用ip访问
  • dz网站如何搬家虚拟主机可以干什么
  • html5 微信网站企业类展厅设计公司
  • 单页网站内链接黑白风格网站
  • 网站建设有什么看法网站电脑培训班附近有吗
  • windows搭建php网站盱眙在仕德伟做网站的有几家
  • 媒体网站的销售怎么做wordpress 数据库地址
  • 做的比较好网站有哪些一站式网站
  • 用wordpress做音乐网站德州市平原县建设局网站
  • 怎么做自己的网站弄商城佣金企业网站 带后台
  • 做轻奢品的电商网站实验室建设网站
  • 怎么获取网站数据做统计北京的网页设计
  • 天猫商务网站建设目的有哪些漫画做的好的网站
  • 如何建设电影网站青岛网站建设费用
  • 网站程序代码优化android安装教程