Beautiful Soup学习(一)

介绍

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式

安装

pip install bs4

基本信息

import bs4
print(bs4.__license__)
print(bs4.__version__)
print(bs4.__copyright__)
print(bs4.__author__)
print(bs4.__all__)

输出

MIT
4.7.1
Copyright (c) 2004-2019 Leonard Richardson
Leonard Richardson (leonardr@segfault.org)
['BeautifulSoup']

基本应用

import bs4
from bs4 import BeautifulSoup
import requests


try:
    url = 'http://qlwb.com.cn/'
    r = requests.get(url=url)
    r.encoding = r.apparent_encoding
    # 用BeautifulSoup解析文本
    bs = BeautifulSoup(r.content, 'lxml')
    # file = open(file="../file/html.txt", mode='w+')
    # 按照标准的缩进格式的结构输出
    # file.write(str(bs.prettify()))
    # 获取html中的title标签
    print(bs.title)
    # 获取html标题名称
    print(bs.title.name)
    # 获取html标题内容
    print(bs.title.string)
    # 获取html所在父节点标签名称
    print(bs.title.parent.name)
    # 获取html中的所有link
    a = bs.find_all('link')
    for i in a:
        print(i)
    # 输出获取的link的href属性
    for i in a:
        print(i.get('href'))
    # 获取html第一条的meta,并输出其content内容
    b = bs.meta
    print(b['content'])
    # 从文档中获取所有文字内容:
    # print(bs.get_text())
except Exception as e:
    print(e)

输出

<title>齐鲁晚报网-山东新闻门户 传播品质资讯</title>
title
齐鲁晚报网-山东新闻门户 传播品质资讯
head
<link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/qlwb.css" rel="stylesheet" type="text/css"/>
<link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/ad.css" rel="stylesheet" type="text/css"/>
<link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/index-szb.css" rel="stylesheet" type="text/css"/>
<link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/search.css" rel="stylesheet" type="text/css"/>
https://img.qlwb.com.cn/templates/qlwb/css/2017shou/qlwb.css
https://img.qlwb.com.cn/templates/qlwb/css/2017shou/ad.css
https://img.qlwb.com.cn/templates/qlwb/css/2017shou/index-szb.css
https://img.qlwb.com.cn/templates/qlwb/css/2017shou/search.css
text/html; charset=utf-8

对象的种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment .

源代码

import bs4
from bs4 import BeautifulSoup

html_doc = """
  <head>
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
  <title>
   齐鲁晚报网-山东新闻门户 传播品质资讯
  </title>
  <meta content="齐鲁晚报,生活日报,鲁南商报,山东新闻,济南新闻,滚动新闻,齐鲁晚报论坛,网上报料,拍客,微博齐鲁" name="keywords"/>
  <meta content="”no-transform”" http-equiv="”Cache-Control”"/>
  <meta content="YSz04dmCHI" name="baidu-site-verification"/>
  <link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/qlwb.css" rel="stylesheet" type="text/css"/>
  <link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/ad.css" rel="stylesheet" type="text/css"/>/
  <link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/index-szb.css" rel="stylesheet" type="text/css"/>
  </head>
"""
# 解析文档
bs = bs4.BeautifulSoup(html_doc, 'lxml')
# 将title赋值给tag
tag = bs.title
# tag类型
print(type(tag))
# 每个tag都有自己的名字,通过 .name 来获取:
print(tag.name)
# 修改tag的name,那将影响所有通过当前Beautiful Soup对象生成的HTML文档:
tag.name = 'TITLE'
print(tag)
# tag的属性的操作方法与字典相同
tag1 = bs.meta
print(tag1['content'])
# 通过.attrs获取属性字典
print(tag1.attrs)
# 添加,删除或修改tag属性
tag1['content'] = 'charset=utf-8'
print(tag1)
del tag1['http-equiv']
print(tag1.get('http-equiv'))
# 遍历标签内的字符串
print(tag.string)
# NavigableString 来包装tag中的字符串
print(type(tag.string))
# BeautifulSoup 对象包含了一个值为 “[document]” 的特殊属性 .name
print(bs.name)
# 获取head下第一个meta标签
print(bs.head.meta)
# tag的 .contents 属性可以将tag的子节点以列表的方式输出:
tag2 = bs.head
print(tag2.contents)
# BeautifulSoup 对象本身一定会包含子节点,也就是说<html>标签也是 BeautifulSoup 对象的子节点
# 字符串没有 .contents 属性,因为字符串没有子节点:
# 通过tag的 .children 生成器,可以对tag的子节点进行循环:
for i in tag2.children:
    print(i)
# .contents 和 .children 属性仅包含tag的直接子节点
# .descendants 属性可以对所有tag的子孙节点进行递归循环
for i in tag2.descendants:
    print(i)
# 如果tag中包含多个字符串 [2] ,可以使用 .strings 来循环获取:
for i in tag.strings:
    print(i)
# 输出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多余空白内容:

输出

<class 'bs4.element.Tag'>
title
<TITLE>
   齐鲁晚报网-山东新闻门户 传播品质资讯
  </TITLE>
text/html; charset=utf-8
{'content': 'text/html; charset=utf-8', 'http-equiv': 'Content-Type'}
<meta content="charset=utf-8" http-equiv="Content-Type"/>
None

   齐鲁晚报网-山东新闻门户 传播品质资讯
  
<class 'bs4.element.NavigableString'>
[document]
<meta content="charset=utf-8"/>
['\n', <meta content="charset=utf-8"/>, '\n', <TITLE>
   齐鲁晚报网-山东新闻门户 传播品质资讯
  </TITLE>, '\n', <meta content="齐鲁晚报,生活日报,鲁南商报,山东新闻,济南新闻,滚动新闻,齐鲁晚报论坛,网上报料,拍客,微博齐鲁" name="keywords"/>, '\n', <meta content="”no-transform”" http-equiv="”Cache-Control”"/>, '\n', <meta content="YSz04dmCHI" name="baidu-site-verification"/>, '\n', <link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/qlwb.css" rel="stylesheet" type="text/css"/>, '\n', <link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/ad.css" rel="stylesheet" type="text/css"/>]


<meta content="charset=utf-8"/>


<TITLE>
   齐鲁晚报网-山东新闻门户 传播品质资讯
  </TITLE>


<meta content="齐鲁晚报,生活日报,鲁南商报,山东新闻,济南新闻,滚动新闻,齐鲁晚报论坛,网上报料,拍客,微博齐鲁" name="keywords"/>


<meta content="”no-transform”" http-equiv="”Cache-Control”"/>


<meta content="YSz04dmCHI" name="baidu-site-verification"/>


<link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/qlwb.css" rel="stylesheet" type="text/css"/>


<link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/ad.css" rel="stylesheet" type="text/css"/>


<meta content="charset=utf-8"/>


<TITLE>
   齐鲁晚报网-山东新闻门户 传播品质资讯
  </TITLE>

   齐鲁晚报网-山东新闻门户 传播品质资讯
  


<meta content="齐鲁晚报,生活日报,鲁南商报,山东新闻,济南新闻,滚动新闻,齐鲁晚报论坛,网上报料,拍客,微博齐鲁" name="keywords"/>


<meta content="”no-transform”" http-equiv="”Cache-Control”"/>


<meta content="YSz04dmCHI" name="baidu-site-verification"/>


<link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/qlwb.css" rel="stylesheet" type="text/css"/>


<link href="https://img.qlwb.com.cn/templates/qlwb/css/2017shou/ad.css" rel="stylesheet" type="text/css"/>

   齐鲁晚报网-山东新闻门户 传播品质资讯
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值