1. #xiaodeng
  2. #python3
  3. #用Beautiful Soup解析html源码
  4.  
  5. html_doc = """
  6. <html>
  7. <head>
  8. <title>The Dormouse's story</title>
  9. </head>
  10. <body>
  11. <b>测试</b>
  12. <p class="title">
  13. <b>The Dormouse's story</b>
  14. </p>
  15. <p class="story">Once upon a time there were three little sisters; and their names were
  16. <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
  17. <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
  18. <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
  19. <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
  20. <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
  21. <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
  22. <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
  23. and they lived at the bottom of a well.
  24. </p>
  25.  
  26. <p class="story">...</p>
  27. """
  28. from bs4 import BeautifulSoup
  29. soup = BeautifulSoup(html_doc,"html.parser")
  30.  
  31. #1、补全html代码格式化输出
  32. #print(soup.prettify())
  33.  
  34. #2、获取html页面标题
  35. #print(soup.title.string)
  36. """
  37. 还有其他类似用法:
  38. 1print(soup.title.title) #result:title
  39. 2print(soup.title.name) #result:title
  40. """
  41.  
  42. #3、查找所有的p标签和p标签的内容,返回一个list
  43. #print(soup.find_all("p"))
  44. #print(soup.find_all("a"))
  45. #print(soup.find_all("title"))
  46. """
  47. 查找一条p标签记录,print(soup.p)
  48. """
  49.  
  50. #4、查p标签下属性class的value值
  51. #print(soup.p["class"])
  52.  
  53. #5、查找所有id="XXX"的标签及标签内容
  54. #print(soup.find_all(id="link3"))
  55.  
  56. #6、从文档中找到所有<a>标签的链接
  57. """
  58. for key in soup.find_all("a"):
  59. print(key.get("href"))
  60. """
  61.  
  62. #7、从文档中获取所有的文字内容
  63. #print(soup.get_text())
  64.  
  65. #8、探索标签数据类型
  66. soup = BeautifulSoup('<b class="boldest">Extremely bold</b>',"html.parser")
  67. tag = soup.b
  68. #print(type(tag)) #<class 'bs4.element.Tag'>
  69.  
  70. #9、获取标签名字,每个tag都有自己的名字,通过.name来获取
  71. #print(soup.b.name)
  72.  
  73. #10、操作标签属性
  74. #一个tag可能有很多个属性.
  75. # tag <b class="boldest"> 有一个 “class” 的属性,值为 “boldest” . tag的属性的操作方法与字典相同
  76. #print(soup.b["class"])
  77.  
  78. #11、执行删除标签属性等操作
  79. #del tag['class']
  80.  
  81. #12、正则表达式
  82. #面例子中找出所有以b开头的标签,这表示<body>和<b>标签都应该被找到
  83. """
  84. import re
  85. soup = BeautifulSoup(html_doc,"html.parser")
  86. for tag in soup.find_all(re.compile("^b")):
  87. print(tag.name)
  88. """
  89. import re
  90. soup = BeautifulSoup(html_doc,"html.parser")
  91. #print(soup.find_all(href=re.compile("tillie"))) #href中包含tillie的超链接
  92.  
  93. #13、列表形式的匹配(匹配a和p标签)
  94. soup = BeautifulSoup(html_doc,"html.parser")
  95. #print(soup.find_all(["a","p"]))
  96.  
  97. #14、查找a标签下id="XXX"的标签及标签内容
  98. # find_all( name , attrs , recursive , text , **kwargs )
  99. # find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.这里有几个例子:
  100. #print(soup.find_all("a",id="link3"))
  101.  
  102. #15、查找a标签下class_="sister"的内容
  103. #print(soup.find_all("a",class_="sister"))
  104.  
  105. #16、通过text参数可以搜文档中的字符串内容.
  106. #与name参数的可选值一样, text参数接受字符串,正则表达式,列表,True
  107. #print(soup.find_all(text="Elsie"))
  108. #print(soup.find_all(text=["Tillie", "Elsie", "Lacie"]))
  109.  
  110. #17、限定查找标签的数量
  111. #print(soup.find_all("a",limit=2))
  112.  
  113. #18、想搜索tag的直接子节点,可以使用参数 recursive=False
  114. doc="""<html>
  115. <head>
  116. <title>The Dormouse's story</title>
  117. </head>
  118. </html>
  119. """
  120. soup = BeautifulSoup(doc,"html.parser")
  121. #print(soup.find_all("title",recursive=False))
  122.  
  123. #19、查找父节点,兄弟节点等办法(待研究)
  124.  
  125. #20、查找title标签
  126. soup = BeautifulSoup(html_doc,"html.parser")
  127. #print(soup.select("title"))
  128.  
  129. #21、找到某个tag标签下的直接子标签
  130. #注意事项:p和b之前要空格,此写法"p>b"错误
  131. #print(soup.select("p > b"))#查找p标签下的直接子标签b
  132. #print(soup.select("body > b"))
  133.  
  134. #22、通过CSS的类名查找class="sister"的标签
  135. result=soup.select(".sister")
  136. #print(result)
  137.  
  138. #23、通过tag的id查找,soup.select("#link1")
  139. result=soup.select("#link1")
  140. #print(result)#[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]

用Beautiful Soup解析html源码的更多相关文章

  1. Python解析器源码加密系列之(二):一次使用标准c的FILE*访问内存块的尝试

    摘要:由于近期打算修改Python解释器以实现pyc文件的加密/解密,出于保密的要求,解密之后的数据只能放在内存中,不能写入到文件中.但是后续的解析pyc文件的代码又只能接受FILE*作为入参,所以就 ...

  2. HtmlAgilityPack --解析Html源码

    最近项目需要从网络上抓取一下数据解析Html源码,奈何正则表达式难写,于是网上搜索找到了“ HtmlAgilityPack”类库,敏捷开发,果然效率非同寻常. 在此做笔记,写下心得,顺便给自己总结一下 ...

  3. mvc5 解析route源码实现自己的route系统

    Asp.net mvc5 解析route源码实现自己的route系统   url route 路由系统的责任是找到匹配的路由,创建路由数据,并将请求分配给一个处理程序. 选择动作是 MVC 的处理程序 ...

  4. 浩哥解析MyBatis源码(十)——Type类型模块之类型处理器

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6715063.html 1.回顾 之前的两篇分别解析了类型别名注册器和类型处理器注册器,此二 ...

  5. 解析 ViewTreeObserver 源码(下)

    继上篇内容,本文介绍 ViewTreeObserver 的使用,以及体会其所涉及的观察者模式,期间会附带回顾一些基础知识.最后,我们简单聊一下 Android 的消息传递,附高清示意图,轻松捋清整个传 ...

  6. Python爬虫之Beautiful Soup解析库的使用(五)

    Python爬虫之Beautiful Soup解析库的使用 Beautiful Soup-介绍 Python第三方库,用于从HTML或XML中提取数据官方:http://www.crummv.com/ ...

  7. Jsoup解析网页源码时常用的Element(s)类

    Jsoup解析网页源码时常用的Element(s)类 一.简介 该类是Node的直接子类,同样实现了可克隆接口.类声明:public class Element extends Node 它表示由一个 ...

  8. 爬虫5_python2_使用 Beautiful Soup 解析数据

    使用 Beautiful Soup 解析数据(感谢东哥) 有的小伙伴们对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Beautiful Soup,有了它我们可以很方便地提取出HT ...

  9. 二十三、并发编程之深入解析Condition源码

    二十三.并发编程之深入解析Condition源码   一.Condition简介 1.Object的wait和notify/notifyAll方法与Condition区别 任何一个java对象都继承于 ...

随机推荐

  1. [转]用 jQuery 实现页面滚动(Scroll)效果的完美方法

    转自: http://zww.me/archives/25144 很多博主都写过/转载过用 jQuery 实现页面滚动(Scroll)效果的方法,但目前搜来的方法大都在 Opera 下有个小 Bug: ...

  2. 【ContestHunter】【弱省胡策】【Round8】

    平衡树维护凸壳/三角函数+递推+线段树 官方题解:http://pan.baidu.com/s/1sjQbY8H 洛阳城里春光好 题目大意:(其实出题人已经写的很简短了……直接copy的-_-.sor ...

  3. [转载][HASS.IO] 【HASSOS安装】成功安装HASSOS 1.9(避开了大部分坑版)

    7月20日HA官方放出HASSOS说明时,我开始入坑HASSOS,经历了安装没流量.打开主页:8123没显示.HASS.IO边栏不显示.安装不了HASS.IO插件等问题之后,在8月6日总算避开了大坑进 ...

  4. 关掉Windows Firewall的PowerShell

    在Windows 8或Windows 2012 R2上, 使用下面的命令: Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled ...

  5. CSS-图片不变形设置

    不管网页做的美还是丑,有一个问题始终是无法躲避的,就是有的时候会遇到图片变形的问题,之前遇到过这种问题解决过,不过还是整体的重新研究了一下图片,其中主要涉及到的知识点就是max-width和max-h ...

  6. CentOS7配置Mysql热备份

    Mysql 的安装: 本人习惯讲安装包放在 /usr/local/src/ ①.[root@localhost ~]#cd /usr/local/src/ ②.[root@localhostsrc]# ...

  7. 揭破android中的闹钟app 二

    · 这节,我们通过wheelview来模仿一个简易的正点闹钟. 我这里不说wheelview来龙去脉,只阐述几个简单的方法,如果,想看一看具体wheelview的内容,请看下面两篇文章: androi ...

  8. 利用shell脚本批量提交网站404死链给百度

    网站运营人员对于死链这个概念一定不陌生,网站的一些数据删除或页面改版等都容易制造死链,影响用户体验不说,过多的死链还会影响到网站的整体权重或排名. 百度站长平台提供的死链提交工具,可将网站存在的死链( ...

  9. GLFW_KEY_KP_ADD和GLFW_KEY_KP_SUBTRACT

      这两个键的代码分别为: GLFW_KEY_KP_ADD(334) GLFW_KEY_KP_SUBTRACT(333)   对应的是键盘右侧数字面板上的+ -键.

  10. Python操作MongoDB(PyMongo模块的使用)

    #!/usr/bin/env python #coding:utf-8 # Author:   --<qingfengkuyu> # Purpose: MongoDB的使用 # Creat ...