专栏首页技术开发——你我他Python杂谈(3)——BeautifulSoup库全面介绍

Python杂谈(3)——BeautifulSoup库全面介绍

BeautifulSoup介绍

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.

BeautifulSoup入门

from bs4 import BeautifulSoup
import requests
r = requests.get("http://python123.io/ws/demo.html")
#print(r.text)
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
#输出网页全部内容
#print(soup.prettify())
#截取网页中的title标签
print(soup.title)
#截取网页中的a标签
print(soup.a)
#看a标签的父标签
print(soup.a.parent.name)
#看a标签的父标签的父标签
print(soup.a.parent.parent.name)
tag = soup.a
print(tag)
#查看标签的各个属性信息
print(tag.attrs)
#如果获取某个属性的值
print(tag.attrs['class'])
#获取标签当中的文本信息
print(soup.a.string)
print(soup.p.string)

BeautifulSoup遍历方法

  1. 向下遍历

from bs4 import BeautifulSoup
import requests
r = requests.get("http://python123.io/ws/demo.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
#查看head的内容
print(soup.head)
#查看head的儿子节点
print(soup.head.contents)
#查看body的儿子节点
print(soup.body.contents)
#查看儿子节点的个数
print(len(soup.body.contents))
#查看某个儿子节点
print(soup.body.contents[1])
#标签树的下行儿子遍历
for child in soup.body.children:
    print(child)
#标签树的下行所有遍历
print("____________________")
for child in soup.body.descendants:
    print(child)
  1. 上行遍历

from bs4 import BeautifulSoup
import requests
r = requests.get("http://python123.io/ws/demo.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
print(soup.html.parent)
#标签树的上行遍历
for parent in soup.a.parents:
    if parent is None:
        print(parent)
    else:
        print(parent.name)
  1. 平行遍历

#平行遍历都必须发生在同一个父节点下个各个节点
from bs4 import BeautifulSoup
import requests
r = requests.get("http://python123.io/ws/demo.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
#a标签的下一个平行标签
print(soup.a.next_sibling)
#a标签的下一个平行标签的下一个平行标签
print(soup.a.next_sibling.next_sibling)
#a标签的前一个平行标签
print(soup.a.previous_sibling)
#检测a标签的父标签
print(soup.a.parent)
#遍历后续节点
print("===================")
for sibling in soup.a.next_siblings:
    print(sibling)
print("===================")
#遍历前续节点
for sibling in soup.a.previous_siblings:
    print(sibling)

BeautifulSoup查找方法

  1. 查找方法(一)

from bs4 import BeautifulSoup
import requests
import re
r = requests.get("http://python123.io/ws/demo.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
#查找所有的a标签
print(soup.find_all('a'))
#可以在里面放列表类型
print(soup.find_all(['a','b']))
#如果里面放的是True,就是找所有的标签
for tag in soup.find_all(True):
    print(tag.name)
#如果想找所有b开头的标签
for tag in soup.find_all(re.compile('b')):
    print(tag.name)
  1. 查找方法(二)

from bs4 import BeautifulSoup
import requests
import re
r = requests.get("http://python123.io/ws/demo.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
#找到p标签中带有course值的标签
print(soup.find_all('p','course'))
#找到id='link1'  (查找标签域中)
print(soup.find_all(id='link1'))
#如果写id值中为link的 (赋值必须精确)
print(soup.find_all(id='link'))
#比如检索到所有id中包括link的
print(soup.find_all(id=re.compile('link')))
#recursise是否对子孙全部检索,默认为True
print(soup.find_all('a'))
print(soup.find_all('a',recursive=False))
#检索字符串(在字符串域)
print(soup.find_all(string = 'Basic Python'))
#检索到更多
print(soup.find_all(string = re.compile('Python')))

BeautifulSoup--HTML格式化和编码

from bs4 import BeautifulSoup
import requests
r = requests.get("http://python123.io/ws/demo.html")
print(r.text)
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
#输出网页全部内容(以一种更加友好的方式)
print(soup.prettify())
#对单个信息的处理(a标签)
print(soup.a.prettify())

声明:我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=23z6dnotw0skk

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 实验二 Python语言基础实验

    2、掌握Python语言的数据类型、运算符、常量、变量、表达式和常用语句等基础知识。

    背雷管的小青年
  • 实验四 Python函数编程实验

    函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段,它能够提高应用的模块性和代码的重复利用率。Python定义函数使用def关键字,格式如下:

    背雷管的小青年
  • 实验五 Python文件操作实验

    在python中,使用open方法打开文件,凡是打开的文件,切记要使用close方法关闭文件。向文件写数据,需要使用write方法来完成,在操作某个文件时,每调...

    背雷管的小青年
  • 模拟实现ATM+购物商城程序

    流程图: ? 需求: ATM:模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手...

    用户1679793
  • 医疗机构频遭黑客攻击,2018年还将面临五大安全威胁

    刚过完年回来,国内几家医院遭遇黑客攻击引发了大量的关注,对于医疗机构安全的担忧,早就已经不是新鲜事。这不只是国内的现状,放眼全球,医疗保健机构依然是勒索软件、数...

    FB客服
  • 一个简单的零配置命令行HTTP服务器 - http-server (nodeJs)

    游魂
  • nodejs配置简单HTTP服务器

    1.介绍 http-server 是一个简单的零配置命令行HTTP服务器, 基于 nodeJs.  如果你不想重复的写 nodeJs 的 web-server....

    hbbliyong
  • Ajax上传图片以及上传之前先预览

    手头上有几个小项目用到了easyUI,一开始决定使用easyUI就注定了项目整体上前后端分离,基本上所有的请求都采用Ajax来完成。在文件上传的时候用到了Aja...

    江南一点雨
  • 2021年网络黑产市场恐比肩世界第三大经济体

    随着组织数字化,犯罪也随之数字化,地下犯罪产业正在前所未有地蓬勃发展。如今,网络犯罪已经成为一项庞大的业务,随着公司与消费者一同投入这个万亿美元的数字世界。

    FB客服
  • 网站框架设计

    B2B ( Business to Business)是指进行电子商务交易的供需双方都是商家(或企业、 公司),她(他)们使用了互联网的技术或各种商务网络平台,...

    格姗知识圈

扫码关注云+社区

领取腾讯云代金券