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 ...
随机推荐
- BZOJ 3060: [Poi2012]Tour de Byteotia 并查集
前 $k$ 个节点形成的结构必定是森林,而 $[k+1,r]$ 之间肯定是都连上,而剩下的一个在 $[1,k],$一个在 $[k+1,r]$ 的节点就能连多少连多少即可. Code: #include ...
- 2018 焦作网络赛 G Give Candies ( 欧拉降幂 )
题目链接 题意 : 给出 N 个糖果.老师按顺序给 1~N 编号的学生分配糖果.每个学生要么不分.要么最少分一个.且由于是按顺序发放.那么对于某个有分到糖果的编号为 i 的学生.则 1~(i-1) 这 ...
- Java根据余弦定理计算文本相似度
项目中需要算2个字符串的相似度,是根据余弦相似性算的,下面具体介绍一下: 余弦相似度计算 余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小.余弦值越接近1,就表明夹角越接近0度, ...
- 阿里云运行docker容器报错
[root@izbp145axkc98giot5b448z ~]# docker run -d 231d40e811cd -p 80:80 --name=nginx 56896ff0b49cfe5f1 ...
- Spring Boot教程(四十二)LDAP来管理用户信息(2)
使用spring-data-ldap的基础用法,定义LDAP中属性与我们Java中定义实体的关系映射以及对应的Repository @Data @Entry(base = "ou=peopl ...
- $\LaTeX$数学公式大全3
$3\ Delimiters$$|$ |$\vert$ \vert$\|$ \|$\Vert$ \Vert$\{$ \{$\}$ \}$\langle$ \langle$\rangle$ \rangl ...
- 「CTSC 2008」祭祀
题目链接 戳我 \(Solution\) 第一问 这道题要知道一个叫做\(Dilworth\)的定理 最长反链\(=\)最小链覆盖 证明(\(from\ r\_64\)): 所以我们只要求一个最小链覆 ...
- HNOI2015菜肴制作
一开始,没想出来,先topsort判环,把impossible拿到手,然后划分联通块,对每个联通块跑一遍topsort,觉得可对了,然后被大样例教育明白了,知道自己的策略错在哪了. 接着在纸上疯狂手模 ...
- linu逻辑分区动态调整大小
注意: 这个动态调整的方法是有丢数据风险的,要确保调整的源分区没有使用或者使用率很低.源分区中如果有重要的文件最好先备份 在centos 6.5上操作过 lvdisplay 查看已有的分区的大小 lv ...
- Excel中,如何将人名按姓和名分开?
在Excel中,怎么将姓名分开呢? 用到三个函数: left函数:从文本字符串的左端开始,返回指定个数的字符: right函数:从字符串右端开始,返回指定个数的字符: len函数:返回文本串的字符数 ...