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. Python3 IO编程之StringIO和BytesIO

    StringIO 很多时候,数据读写不一定是文件,也可以在内存中读写. 要把str写入StringIO,我们需要先创建一个StringIO,然后像文件一样写入即可 >>> from ...

  2. Tomcat教程(转)

    转载链接: https://www.cnblogs.com/jingmoxukong/p/8258837.html?utm_source=gold_browser_extension 简介 Tomca ...

  3. golang中sync.RWMutex和sync.Mutex区别

    golang中sync包实现了两种锁Mutex (互斥锁)和RWMutex(读写锁),其中RWMutex是基于Mutex实现的,只读锁的实现使用类似引用计数器的功能. type Mutex     f ...

  4. Netty学习笔记(四)——实现dubbo的rpc

    1.rpc基本介绍 RPC ( Remote Procedure Call) -远程过程调用,是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机的子程序,两个或多个应用程序分布不同 ...

  5. gensim中word2vec

    from gensim.models import Word2Vec Word2Vec(self, sentences=None, size=100, alpha=0.025, window=5, m ...

  6. Python-04-数据结构

    一.数字 整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时候用十六进制表示 ...

  7. python 之 并发编程(非阻塞IO模型、I/O多路复用、socketserver的使用)

    9.16 非阻塞IO模型 cpu占用率过高 服务端: from socket import * import time s = socket() s.bind(('127.0.0.1',8080)) ...

  8. python第三天---列表的魔法

    # list 列表 # 中括号括起来,逗号分隔每个元素, # 列表中可以是数字字符串.列表等都可以放进去 list1 = [123, "book", "手动", ...

  9. Vuex入门、同步异步 存取值

    目的: 1.了解vuex中的各个js文件的用途 2.利用vuex存值 3.利用vuex取值 4.Vuex的异步同步加载问题 1. vuex中各个组件之间传值 1.父子组件 父组件-->子组件,通 ...

  10. javascript之new操作符

    new 运算符做了哪些事情 1.新生成了一个对象 2.链接到原型 3.绑定 this 4.返回新对象 自己实现一个 new function create() { // 创建一个空的对象 let ob ...