BeautifulSoup示例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: imcati html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b><b>123</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>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')
#格式化输出对象内容
#print(soup.prettify())
#根据标签名获取整个标签,取第一个值
print(soup.a)
#获取标签的名字
print(soup.title.name)
#获取标签中的文本
print(soup.title.string)
#获取title标签的父标签
print(soup.title.parent.name)
#获取p标签的子标签
print(soup.p.contents)
#获取标签的属性值(两种方式)
print(soup.p["class"])
print(soup.p.attrs["class"])
#使用select、css选择器 类名前加.,id名前加#
print(soup.select("a"))
print(soup.select(".title"))
#获取内容
print(soup.select(".title")[0])
print(soup.select(".title")[0].get_text())
#获取属性值
print(soup.select(".title")[0].attrs["class"])
#获取p下面的子标签内容
print(soup.select('p > b')[1].get_text())
#使用find、findall进行查找 find返回第一个查找结果,find_all返回所有查找结果
print(soup.find('p',attrs={"class":"title"}))
print(soup.find_all('p',attrs={"class":"title"})) 输出:
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
title
The Dormouse's story
head
[<b>The Dormouse's story</b>, <b>123</b>]
['title']
['title']
[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
[<p class="title"><b>The Dormouse's story</b><b>123</b></p>]
<p class="title"><b>The Dormouse's story</b><b>123</b></p>
The Dormouse's story123
['title']
123
<p class="title"><b>The Dormouse's story</b><b>123</b></p>
[<p class="title"><b>The Dormouse's story</b><b>123</b></p>]

PyQuery示例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: imcati
from pyquery import PyQuery as pq
html = """
<html lang="en">
<head>
<title>PyQuery</title>
</head>
<body>
<ul id="container">
<li class="o1">MM</li>
<li class="o2 active">MN<a class='o22'>fad</a></li>
<li class="o3">GN</li>
</ul>
</body>
</html>
"""
#初始化为PyQuery对象
doc = pq(html)
print(type(doc))
print(doc)


输出:
<class 'pyquery.pyquery.PyQuery'>
<html lang="en">
<head>
<title>PyQuery</title>
</head>
<body>
<ul id="container">
<li class="o1">MM</li>
<li class="o2 active">MN<a class="o22">fad</a></li>
<li class="o3">GN</li>
</ul>
</body>
</html>


#将HTML文件初始化
#doc = pq(filename = './pyquery_demo.html') print(type(doc))
#print(doc)
#对网址响应进行初始化
#doc = pq(url='http://www.baidu.com')
#print(type(doc))
#print(doc)
#用css选择器来实现,如果要选id前面加#,如果选class,前面加.,如果选标签名,什么也不加
doc = pq(html)
# 根据标签
print(doc('title'))
print(doc('.o1'))


输出:
<title>PyQuery</title>


<li class="o1">MM</li>


# 组合标签
print(doc('.o2.active')) #空格表示里面,没有空格表示整体
print(doc('.o2 .o22'))#空格表示里面,没有空格表示整体


输出:
<li class="o2 active">MN<a class="o22">fad</a></li>

<a class="o22">fad</a>

# 伪类选择器
print(doc('li:nth-child(2)'))
# 根据标签内容获取标签
print(doc("li:contains('MM')"))

输出:
<li class="o2 active">MN<a class="o22">fad</a></li>

<li class="o1">MM</li>


#利用find方法
print(doc.find('li'))
# 也可以用.children()查找直接子元素
container = doc.find('#container')
print(container.children())

输出:
<li class="o1">MM</li>
<li class="o2 active">MN<a class="o22">fad</a></li>
<li class="o3">GN</li>

<li class="o1">MM</li>
<li class="o2 active">MN<a class="o22">fad</a></li>
<li class="o3">GN</li>

#.parent()查找对象的父元素
object_2 = doc.find('.o2')
print(object_2.parent())


输出:
<ul id="container">
<li class="o1">MM</li>
<li class="o2 active">MN<a class="o22">fad</a></li>
<li class="o3">GN</li>
</ul>

# #.parents()祖先节点
object_2 = doc.find('.o2')
parent = object_2.parents('#container')
#当然也可以传入参数
print(parent)


输出:
<ul id="container">
<li class="o1">MM</li>
<li class="o2 active">MN<a class="o22">fad</a></li>
<li class="o3">GN</li>
</ul>

#.siblings()兄弟元素,即同级别的元素,不包括自己
object_2 = doc.find('.o2')
print(object_2.siblings())


输出:
<li class="o1">MM</li>
<li class="o3">GN</li>


# 遍历
lis = doc('li').items() #.items会是一个生成器 # print(type(lis))
for li in lis:
print(li)


输出:
<li class="o1">MM</li>

<li class="o2 active">MN<a class="o22">fad</a></li>

<li class="o3">GN</li>


# filter() 根据类名、id名得到指定元素,例:
d=pq("<div><p id='1'>test 1</p><p id='2'>test 2</p></div>")
print(d('p').filter('#1')) #返回[<p#1>]
print(d('p').filter('#2')) #返回[<p.2>]
# eq(index) 根据给定的索引号得到指定元素
# 接上例,若想得到第二个p标签内的内容,则可以:
print (d('p').eq(1).html()) #返回test 2


输出:
<p id="1">test 1</p>
<p id="2">test 2</p>
test 2


# 获取属性值
o2 = doc.find('.o2')
print(o2.attr('class'))
# 获取文本值
o2 = doc.find('.o2')
print(o2.text())


输出:
o2 active
MNfad

python解析库的更多相关文章

  1. python解析库之 XPath

    1. XPath (XML Path Language) XML路径语言 2. XPath 常用规则: nodename    选取此节点的所有子节点 /                    从当前 ...

  2. python 中的json解析库

    当一个json 数据很大的时候.load起来是很耗时的.python中常见的json解析库有cjson,simplesjson,json, 初步比较了一下, 对于loads来讲 simplejson ...

  3. Python命令行解析库argparse

    2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 1.example 有一道面试题:编写一个脚本main.py,使用方式如下: ...

  4. Python 爬虫 解析库的使用 --- Beautiful Soup

    知道了正则表达式的相关用法,但是一旦正则表达式写的有问题,得到的可能就不是我们想要的结果了.而且对于一个网页来说,都有一定的特殊结构和层级关系,而且有很多节点都有id或class来做区分,所以借助它们 ...

  5. python爬虫之解析库Beautiful Soup

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

  6. Python爬虫之Beautiful Soup解析库的使用(五)

    Python爬虫之Beautiful Soup解析库的使用 Beautiful Soup-介绍 Python第三方库,用于从HTML或XML中提取数据官方:http://www.crummv.com/ ...

  7. 【Python爬虫】PyQuery解析库

    PyQuery解析库 阅读目录 初始化 基本CSS选择器 查找元素 遍历 获取信息 DOM操作 伪类选择器 PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎 ...

  8. 【Python爬虫】BeautifulSoup网页解析库

    BeautifulSoup 网页解析库 阅读目录 初识Beautiful Soup Beautiful Soup库的4种解析器 Beautiful Soup类的基本元素 基本使用 标签选择器 节点操作 ...

  9. Python命令行解析库argparse(转)

    原文:http://www.cnblogs.com/linxiyue/p/3908623.html 2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse ...

随机推荐

  1. redis异步处理

    $reids = new Redis; $redis->connect('localhost',6379); $redis->auth(''); //将数组转换成字符串再存到redis中 ...

  2. Gym 100971D 单调栈

    D - Laying Cables Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u ...

  3. matlab函数 bsxfun浅谈(转载)

    关于matlab函数 bsxfun本文来源:http://blog.sina.com.cn/s/blog_9e67285801010ttn.html a=[1 2 3];b=[1 2 3]';c=bs ...

  4. sh_20_for语法演练

    sh_20_for语法演练 for num in [1, 2, 3]: print(num) if num == 2: break else: # 如果循环体内部使用break退出了循环 # else ...

  5. Js模块化开发--seajs和gruntJs

    1.Seajs库 解决开发中的冲突依赖等问题,提供代码可维护性. SeaJS 是由玉伯开发的一个遵循 CommonJS 规范的模块加载框架,可用来轻松愉悦地加载任意 JavaScript 模块和css ...

  6. 原生Js_实现广告弹窗

    广告样式当页面加载后5s刷新在右下角 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  7. Windows下Yarn安装与使用

    参考博客 1.安装yarn 方法一:使用安装包安装 官方下载安装包,https://yarnpkg.com/zh-Hans/docs/install,安装完毕后,一定要配置环境变量. 方法二:使用np ...

  8. mybatis oracle mysql 批量插入时的坑爹问题--需谨记

    mybatis oracle mysql 批量插入一.oracle的批量插入方式insert into db(id, zgbh, shbzh) select '1', '2', '3' from du ...

  9. Linux shell - `dirname $0` 定位到运行脚本的相对位置

    例1. 在/home/admin/test/下新建test.sh内容如下: cd `` echo `pwd` 然后返回到/home/admin/执行 sh test/test.sh 运行结果: /ho ...

  10. window环境下 恢复odoo数据库备份文件时产生的 Database restore error: Command `psql` not found.

    1,首先先查看 PostgreSQL 是否安装在C盘,如果安装在其他盘 则需要配置环境变量 配置完成后重启服务就可以了 2, 如果还不行,只需在odoo.conf中添加一个配置设置.也就是在odoo项 ...