html = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a><a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>
and they lived at the bottom of a well.</p>
<p class="story">...</p></body></html>
""" soup=BS(html,'html.parser') for i in soup.find_all('a'):
print('i.text:',i.text)#注释掉的内容就不打印了 str类型
print('i.string:',i.string) #注释掉的内容 都会打印出来,NavigableString对象 print('soup.head.contents:',soup.head.contents,type(soup.head.contents))
print('soup.head.children:',soup.head.children,type(soup.head.children)) print('soup.body.contents:',soup.body.contents)#返回一个子元素的列表
print('soup.body.children:',soup.body.children)#返回一个子元素的迭代器 for i in soup.body.children:
print(i) print('子孙节点 都显示出来')
for i in soup.body.descendants:
print(i) print('soup.body.string:',soup.body.string)
print('soup.body.strings:',soup.body.strings)
print('soup.body.stripped_strings:',soup.body.stripped_strings) #过滤掉所有空格显示 print('去掉空格的body子元素:')
for i in soup.body.stripped_strings:
print(i) print('soup.a.parent:',soup.a.parent)
print('soup.a.next_sibling:',soup.a.next_sibling) #注意文本节点、换行\n都可能成为当前节点的上一个或者下一个同级节点
print('soup.a.previous_sibling:',soup.a.previous_sibling)
print('soup.a.next_element:',soup.a.next_element) #下一个元素 不一定同级
print('soup.a.previous_element:',soup.a.previous_element) print('打印所有后面的同级节点:\n')
for i in soup.a.next_siblings:
print(i) print('soup.a.next_element:',list(soup.a.next_elements)[1]) print('***********find_all*****') print(soup.find_all('a')) print('引入正则表达式:') import re
print(soup.find_all(re.compile(r'^title'))) #正则匹配的是 标签的名字 print('列表的方式匹配:')
print(soup.find_all(['a','b'])) print('函数的方式匹配,类似filter')
def func(tag):
if tag.has_attr('class') and re.search(r'^a',tag.name):
return tag print(soup.find_all(func)) html = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a><a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>
and they lived at the bottom of a well.</p>
<p class="story">...</p></body></html>
""" soup=BS(html,'html.parser') print('按属性值查找:')
print(soup.find_all(id='link1'))
print(soup.find_all('a',id='link1')) print(soup.find_all(id='link2',href=re.compile(r'laci'))) #返回的都是列表
print(soup.find_all(class_='story')) #注意后面加的下划线
print(soup.find_all(attrs={'class':'sister'})) print('按元素内容查找text参数:')
print(soup.find_all(text='Tillie'))
print(soup.find_all(text=['Tillie','Lacie'])) #返回的都是元素内容
print(soup.find_all(text=re.compile(r'ormous'))) print('通过内容元素 找到上级元素')
print(soup.find_all(text=re.compile(r'ormous'))[1].parent.parent) #限制查找数量
print('limit:')
print(soup.find_all('a',limit=2)) print('只在子节点查找:')
print(soup.body.find_all('a',limit=2,recursive=False)) #只查找子节点 recursive循环的、递归的
print(soup.body.find_all(class_='story',recursive=False))

python BeautifulSoup4解析网页的更多相关文章

  1. Python爬虫解析网页的4种方式 值得收藏

    用Python写爬虫工具在现在是一种司空见惯的事情,每个人都希望能够写一段程序去互联网上扒一点资料下来,用于数据分析或者干点别的事情. ​ 我们知道,爬虫的原理无非是把目标网址的内容下载下来存储到内存 ...

  2. python bs4解析网页时 bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to inst(转)

    Python小白,学习时候用到bs4解析网站,报错 bs4.FeatureNotFound: Couldn't find a tree builder with the features you re ...

  3. 使用Python中的urlparse、urllib抓取和解析网页(一)(转)

    对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...

  4. python网络爬虫之解析网页的BeautifulSoup(爬取电影图片)[三]

    目录 前言 一.BeautifulSoup的基本语法 二.爬取网页图片 扩展学习 后记 前言 本章同样是解析一个网页的结构信息 在上章内容中(python网络爬虫之解析网页的正则表达式(爬取4k动漫图 ...

  5. Python中的urlparse、urllib抓取和解析网页(一)

    对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...

  6. python网络爬虫之解析网页的XPath(爬取Path职位信息)[三]

    目录 前言 XPath的使用方法 XPath爬取数据 后言 @(目录) 前言 本章同样是解析网页,不过使用的解析技术为XPath. 相对于之前的BeautifulSoup,我感觉还行,也是一个比较常用 ...

  7. python网络爬虫-解析网页(六)

    解析网页 主要使用到3种方法提取网页中的数据,分别是正则表达式.beautifulsoup和lxml. 使用正则表达式解析网页 正则表达式是对字符串操作的逻辑公式 .代替任意字符 . *匹配前0个或多 ...

  8. Python爬虫之解析网页

    常用的类库为lxml, BeautifulSoup, re(正则) 以获取豆瓣电影正在热映的电影名为例,url='https://movie.douban.com/cinema/nowplaying/ ...

  9. [技术博客] BeautifulSoup4分析网页

    [技术博客] BeautifulSoup4分析网页 使用BeautifulSoup4进行网页文本分析 前言 进行网络爬虫时我们需要从网页源代码中提取自己所需要的信息,分析整理后存入数据库中. 在pyt ...

随机推荐

  1. Django 之memcached的应用

    memcached介绍: memcached之前是danga的一个项目,最早是为LiveJournal服务的,当初设计师为了加速LiveJournal访问速度而开发的,后来被很多大型项目采用.官网是w ...

  2. zookeeper的java api操作

    zookeeper的java api操作 创建会话: Zookeeper(String connectString,int sessionTimeout,Watcher watcher) Zookee ...

  3. Jetty的安装和配置

    Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可以将 ...

  4. input回退禁止

    //处理键盘事件 禁止后退键(Backspace)密码或单行.多行文本框除外 function forbidBackSpace(e) { var ev = e || window.event; //获 ...

  5. LeetCode 378. 有序矩阵中第K小的元素(Kth Smallest Element in a Sorted Matrix) 13

    378. 有序矩阵中第K小的元素 378. Kth Smallest Element in a Sorted Matrix 题目描述 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩 ...

  6. pytorch1.0进行Optimizer 优化器对比

    pytorch1.0进行Optimizer 优化器对比 import torch import torch.utils.data as Data # Torch 中提供了一种帮助整理数据结构的工具, ...

  7. xsy 2412【BZOJ4569】【Scoi2016】萌萌哒

    Description Description 一个长度为n的大数,用S1S2S3...Sn表示,其中Si表示数的第i位,S1是数的最高位,告诉你一些限制条件,每个条件表示为四个数,l1,r1,l2, ...

  8. vue利用keep-alive/beforeRouteLeave前进刷新后退不刷新(缓存)

      keep-alive缓存 在vue中默认router-link进入页面组件都是不缓存的.对于数据不会更新的页面.可以使用keep-alive来缓存以提高性能. 在项目src/router/inde ...

  9. 【Linux】一步一步学Linux——Linux版本(03)

    目录 00. 目录 01. Linux内核版本 02. Linux内核官方网站 03. Linux发行版本 04. Linux发行版本介绍 4.1 Ubuntu 4.2 RedHat 4.3 Debi ...

  10. MySQL中的case when 中对于NULL值判断的坑

    sql中的case when 有点类似于Java中的switch语句,比较灵活,但是在Mysql中对于Null的处理有点特殊 Mysql中case when语法: 语法1: CASE case_val ...