python解析库
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解析库的更多相关文章
- python解析库之 XPath
1. XPath (XML Path Language) XML路径语言 2. XPath 常用规则: nodename 选取此节点的所有子节点 / 从当前 ...
- python 中的json解析库
当一个json 数据很大的时候.load起来是很耗时的.python中常见的json解析库有cjson,simplesjson,json, 初步比较了一下, 对于loads来讲 simplejson ...
- Python命令行解析库argparse
2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 1.example 有一道面试题:编写一个脚本main.py,使用方式如下: ...
- Python 爬虫 解析库的使用 --- Beautiful Soup
知道了正则表达式的相关用法,但是一旦正则表达式写的有问题,得到的可能就不是我们想要的结果了.而且对于一个网页来说,都有一定的特殊结构和层级关系,而且有很多节点都有id或class来做区分,所以借助它们 ...
- python爬虫之解析库Beautiful Soup
为何要用Beautiful Soup Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式, 是一个 ...
- Python爬虫之Beautiful Soup解析库的使用(五)
Python爬虫之Beautiful Soup解析库的使用 Beautiful Soup-介绍 Python第三方库,用于从HTML或XML中提取数据官方:http://www.crummv.com/ ...
- 【Python爬虫】PyQuery解析库
PyQuery解析库 阅读目录 初始化 基本CSS选择器 查找元素 遍历 获取信息 DOM操作 伪类选择器 PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎 ...
- 【Python爬虫】BeautifulSoup网页解析库
BeautifulSoup 网页解析库 阅读目录 初识Beautiful Soup Beautiful Soup库的4种解析器 Beautiful Soup类的基本元素 基本使用 标签选择器 节点操作 ...
- Python命令行解析库argparse(转)
原文:http://www.cnblogs.com/linxiyue/p/3908623.html 2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse ...
随机推荐
- MySQL错误:ERROR 1067 (42000): Invalid default value for 'timestamp_field'
数据库报错 ERROR 1067 (42000): Invalid default value for 'start_time' 是因为数据库的配置有问题: 可以看到 NO_ZERO_IN_DA ...
- Mysql历史版本下载地址
Mysql历史版本下载地址:http://downloads.mysql.com/archives/community/
- k8s知识1
kubernetes到底有多难?看下面的白话: service 网络通信原理service 由k8s外面的服务作为访问端 内部里面其实是pod————————————————————————————— ...
- codeforces340C
Tourist Problem CodeForces - 340C Iahub is a big fan of tourists. He wants to become a tourist himse ...
- C++入门经典-类成员的可访问性,继承后的可访问性
1:关键字public.private.protected说明类成员是共有的.私有的,还是保护的.这3个关键字将类划分为3个区域,在public区域的类成员可以在类作用域外被访问,而private区域 ...
- Java项目框架搭建系列(Java学习路线)
前言: 已经工作4年,真是时间飞逝. 其实当你在一间公司工作一两年之后,公司用到的开发框架的基本使用你应该都会了. 你会根据一个现有项目A复制一下搭建出另外一个类似框架的项目B,然后在项目B上进行业务 ...
- Mysql 修改密码和设置远程连接
[参考文章]:mysql修改root密码和设置权限 1. 修改密码 1.1 set password 登录mysql set password for 用户名@localhost = password ...
- 【免费电子书】这可能是全网最齐的程序员编程电子书PDF合集了!
[toc] 最近博主
- 前世今生:Hive、Shark、spark SQL
Hive (http://en.wikipedia.org/wiki/Apache_Hive )(非严格的原文顺序翻译) Apache Hive是一个构建在Hadoop上的数据仓库框架,它提供数据的 ...
- JvmOverloads kotlin(14)(转)
在Kotlin中@JvmOverloads注解的作用就是:在有默认参数值的方法中使用@JvmOverloads注解,则Kotlin就会暴露多个重载方法.可能还是云里雾里,直接上代码,代码解释一切:如果 ...