Python BautifulSoup 节点信息

目录
  • 1、获取节点的内容
  • 2、获取节点的名称
  • 3、获取节点的属性值
  • 3、BS4具体使用

1、获取节点的内容

获取节点内容:

如果要获得节点中的文本内容,可以用 string 或 get_text()

  • string:只能获得节点中的文本内容,如果节点中有子孙节点,string就获取不到内容,返回 None
  • get_text() 推荐使用:获取到节点中包含的所有内容包括子孙节点中的内容
  • 可以使用get_text() 方法快速得到源文件中的所有文本内容,如 soup.get_text()

使用实例:

待解析的html文本文件如下:id为al的p标签有子孙节点,id为bl的span标签没有子孙节点

<!DOCTYPE html>
<html lang="en">
<head>
<title>test</title>
</head>
<body>
<p class="title"/>

<a href="http://localhost:8080" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" />
<div>
    <p class="story" id="al">
        <a class="s1" href="www.baidu.com" rel="external nofollow"  id="l1">a1</a>
        <a class="s2" href="" id=" rel="external nofollow"  rel="external nofollow" l2">a2</a>
        <a class="s3" href="" id=" rel="external nofollow"  rel="external nofollow" l3">a3</a>
        <span>span</span>
    </p>
    <span id="bl">
        方唐镜
    </span>
</div>
</body>
</html>

使用实例1:对p标签和span标签进行解析,打印里面的内容

from bs4 import BeautifulSoup

#使用 lxml 解析器
soup = BeautifulSoup(open('test.html',encoding='utf-8'),'lxml')

list = soup.select('#al')[0]
print(list.string)
print(list.get_text())

执行结果及说明:

用string获取p标签的文本内容,因为p标签有子孙节点,所以返回None;

get_text()获取p标签的文本内容,返回p标签及子孙节点中的文本内容;

None

# 用
a1
a2
a3

使用实例2:对span标签进行解析,打印里面的内容

span = soup.select('#bl')[0]
print(span.string)
print(span.get_text())

执行结果及说明:

string获取span标签的文本内容,因为span标签没有子孙节点,所以可以返回文本内容;

用get_text()获取span标签的文本内容,因为span标签没有子孙节点,所以只返回span标签的文本内容;

span
 
        方唐镜

方唐镜

2、获取节点的名称

.name 获取节点的名称

待解析的html文本文件:

<!DOCTYPE html>
<html lang="en">
<head>
<title>test</title>
</head>
<body>
<p class="title"/>
<a href="http://localhost:8080" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" />
<div>
    <span id="span" class="c1">
        方唐镜
    </span>
</div>
</body>
</html>

获取节点的属性实例:

from bs4 import BeautifulSoup

#使用 lxml 解析器
soup = BeautifulSoup(open('test.html',encoding='utf-8'),'lxml')
# 根据class选择器查找,返回第一个节点
obj = soup.select('.c1')[0]
print(obj.name)

执行结果:该节点为span节点

span

3、获取节点的属性值

.attrs 获取获取节点的属性值,并以字典的形式返回

待解析的html文本文件:

<!DOCTYPE html>
<html lang="en">
<head>
<title>test</title>
</head>
<body>
<p class="title"/>
<a href="http://localhost:8080" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" />
<div>
    <span id="span" class="c1">
        方唐镜
    </span>
</div>
</body>
</html>

获取节点的属性实例:

from bs4 import BeautifulSoup

#使用 lxml 解析器
soup = BeautifulSoup(open('test.html',encoding='utf-8'),'lxml')
# 根据class选择器查找,返回第一个节点
obj = soup.select('.c1')[0]
print(obj.attrs)

执行结果:以字典的形式返回

{'id': 'span', 'class': ['c1']}

可以通过get方法获得字典里指定属性的属性值:有下面三种方法

# 获取class属性的属性值
#方式一(推荐)
print(obj.attrs.get('class'))
#方式二
print(obj.get('class'))
#方式三
print(obj['class'])

执行结果:

['c1']
['c1']
['c1']

3、BS4具体使用

代码实例:获取所有饮品的名称·

import urllib.request
from bs4 import BeautifulSoup
from lxml import etree

url = 'https://www.starbucks.com.cn/menu/'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.2242 SLBChan/10'
}
# 定制请求,发送请求并返回响应对象和html文档
request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')

# 使用 lxml 解析器
soup = BeautifulSoup(content,'lxml')
# 检索html文档,返回列表形式
name_list = soup.select('ul[class="grid padded-3 product"] strong')
# 遍历打印
for name in name_list:
    print(name.string)

执行结果:

到此这篇关于Python BautifulSoup 节点信息的文章就介绍到这了,更多相关Python BautifulSoup 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python json 递归打印所有json子节点信息的例子

    我就废话不多说了,直接上代码吧 def json_txt(self, dic_json): #self.debug_print("json_txt") if isinstance(dic_json, dict): # 判断是否是字典类型isinstance 返回True false for key in dic_json: #dic_json = json.loads(s) s = dic_json[key] #self.debug_print(str(len(s)) + "

  • Python BautifulSoup 节点信息

    目录 1.获取节点的内容 2.获取节点的名称 3.获取节点的属性值 3.BS4具体使用 1.获取节点的内容 获取节点内容: 如果要获得节点中的文本内容,可以用 string 或 get_text() string:只能获得节点中的文本内容,如果节点中有子孙节点,string就获取不到内容,返回 None get_text() 推荐使用:获取到节点中包含的所有内容包括子孙节点中的内容 可以使用get_text() 方法快速得到源文件中的所有文本内容,如 soup.get_text() 使用实例:

  • python爬虫租房信息在地图上显示的方法

    本人初学python是菜鸟级,写的不好勿喷. python爬虫用了比较简单的urllib.parse和requests,把爬来的数据显示在地图上.接下里我们话不多说直接上代码: 1.安装python环境和编辑器(自行度娘) 2.本人以58品牌公寓为例,爬取在杭州地区价格在2000-4000的公寓. #-*- coding:utf-8 -*- from bs4 import BeautifulSoup from urllib.parse import urljoin import requests

  • Python 模拟员工信息数据库操作的实例

    1.功能简介 此程序模拟员工信息数据库操作,按照语法输入指令即能实现员工信息的增.删.改.查功能. 2.实现方法 • 架构: 本程序采用python语言编写,关键在于指令的解析和执行:其中指令解析主要运用了正则表达式来高效匹配有效信息:指令执行通过一个commd_exe主执行函数和增.删.改.查4个子执行函数来实现,操作方法主要是运用面向对象方法将员工信息对象化,从而使各项操作都能方便高效实现.程序主要函数如下: (1)command_exe(command) 指令执行主函数,根据指令第一个字段

  • linux系统使用python获取cpu信息脚本分享

    linux系统使用python获取cpu信息脚本分享 复制代码 代码如下: #!/usr/bin/env Pythonfrom __future__ import print_functionfrom collections import OrderedDictimport pprint def CPUinfo():    ''' Return the information in /proc/CPUinfo    as a dictionary in the following format:

  • Python获取服务器信息的最简单实现方法

    本文实例讲述了Python获取服务器信息的最简单实现方法.分享给大家供大家参考.具体如下: 主要核心代码如下: sUrl = 'http://www.163.com' sock = urllib2.urlopen(sUrl) sock.headers.values() 希望本文所述对大家的Python程序设计有所帮助.

  • Python实现股市信息下载的方法

    本文实例讲述了Python实现股市信息下载的方法.分享给大家供大家参考.具体如下: 该程序下载来自yahoo财经的股市信息. import urllib def getURL(url): socket = urllib.urlopen(url) readSocket = socket.read() socket.close() return readSocket def printInfo(listInfo): print "Stock Symbol: " , listInfo[0]

  • python实现外卖信息管理系统

    本文为大家分享了python实现外卖信息管理系统的具体代码,供大家参考,具体内容如下 一.需求分析 需求分析包含如下: 1.问题描述 以外卖信息系统管理员身份登陆该系统,实现对店铺信息.派送员信息.客服人员信息.订单信息.配送信息等进行有条件查询以及信息的录入.修改.删除等功能. 2.系统功能描述 (1)信息录入:使用wxpython设计排版编写窗口界面,给出录入信息的接口,通过python语句实现与数据库的连接,从而向数据库中插入相应数据. (2)信息修改:使用wxpython设计排版编写窗口

  • Python实现文件信息进行合并实例代码

    将电话簿TeleAddressBook.txt和电子邮件EmailAddressBook.txt合并为一个完整的AddressBook.txt def main(): ftele1=open("d:\TeleAddressBook.txt","rb") ftele2=open("d:\EmailAddressBook.txt","rb") ftele1.readline() ftele2.readline() lines1=f

  • 深入浅析Python获取对象信息的函数type()、isinstance()、dir()

    type()函数: 使用type()函数可以判断对象的类型,如果一个变量指向了函数或类,也可以用type判断. 如: class Student(object): name = 'Student' a = Student() print(type(123)) print(type('abc')) print(type(None)) print(type(abs)) print(type(a)) 运行截图如下: 可以看到返回的是对象的类型. 我们可以在if语句中判断比较两个变量的type类型是否相

随机推荐