做过前端开发的同志都应该知道或了解过 jQquery,jQuery 是一个用来处理 DOM 的 JavaScript 库 。pyquery 说白了就是 jQquery 的 Python 版本。不得不说 pyquery 在爬虫网页解析上的又一大神器。
pyquery 相当于 juquery 一样的 Python 库,它有类似于 jQuery 的 API 且可以通过 lxml 模块快速处理 XML 和 HTML 文档,具体可以查看 pyquery – PyQuery complete API 。
一.初始化为 PyQuery 对象
下面所有实例的开头声明都如下
from pyquery import PyQuery as pq
from lxml import etree
import urllib
这里有四种初始化方法
1.直接字符串
# pyquery 的四种初始化方式
# pq 参数可以直接传入 HTML 代码,doc 现在就相当于 jQuery 里面的 $ 符号。
doc=pq("<html></html>")
2.lxml.etree 方法处理
#先用 lxml 的 etree 处理一下代码,这样如果你的 HTML 代码出现一些不完整或者疏漏,都会自动转化为完整清晰结构的 HTML代码。
doc = pq(etree.fromstring("<html></html>"))
3.直接传 URL
# 这里就像直接请求了一个网页一样,类似用 urllib 来直接请求这个链接,得到 HTML 代码。
doc = pq('http://www.baidu.com',encoding='utf-8')
4.传文件路径
# 可以直接传某个路径的文件名。
doc = pq(filename='hello.html')
二. Css
1.添加、切换、移除 Css
# css
p = pq('<p id="hello" class="one"></p>')('p')
p.attr("class")
# 添加
p.addClass("toto")
print(p)
# 切换
p.toggleClass("titi toto")
print(p)
# 移除
p.removeClass("titi")
print(p)
输出如下
<p id="hello" class="one toto"/>
<p id="hello" class="one titi"/>
<p id="hello" class="one"/>
2.操作 Css 样式
#Or the css style:
p.css("font-size", "15px")
print(p)
p.attr("style")
p.css({
"font-size": "17px"})
print(p)
输出如下
<p id="hello" class="one" style="font-size: 15px"/>
<p id="hello" class="one" style="font-size: 17px"/>
3.以更加 Pythonic 的方式完成同样的功能
#更加 pythonic 的方法 ,Css属性的获取与操作
p.css.font_size = "16px"
print(p.attr.style)
p.css['font-size'] = "15px"
print(p.attr.style)
p.css(font_size="17px")
print(p.attr.style)
p.css = {
"font-size": "18px"}
print(p.attr.style)
输出如下
font-size: 16px
font-size: 15px
font-size: 17px
font-size: 18px
三.使用伪类
在 html 中,有 type
属性,支持语法 <input type="value">
。这里的匹配的 Css 元素,就相对于 html
中的属性值。
如下是使用使用伪类匹配 Css 元素列表
名称 | 含义 |
---|---|
:button | 匹配所有按钮输入元素和按钮元素 |
:checkbox | 匹配所有复选框输入元素 |
:checked | 匹配选中的元素,下标从0开始 |
:child | 右边是左边的直接子元素 |
:contains() | 包含元素 |
:descendant | 右边是左边的子元素、孙元素或者更远的后继元素 |
:disabled | 匹配所有被禁用的元素 |
:empty | 匹配所有不包括任何其他元素的元素 |
:enabled | 匹配所有启用的元素 |
:eq() | 使用下标匹配 |
:even | 从下标0开始,匹配所有偶数元素 |
:file | 匹配所有文件类型的输入元素 |
:first | 匹配第一个被选择的元素 |
:gt() | 匹配下标大于指定值的元素 |
:has() | 匹配包含至少一个匹配元素的元素 |
:header | 匹配所有标题元素 |
:hidden | 匹配所有隐藏的输入元素 |
:image | 匹配所有图像输入元素 |
:input | 匹配所有输入元素 |
:last | 匹配最后一个选择的元素 |
:lt() | 匹配所有下标小于指定值的元素 |
:odd | 匹配奇元素,下标从0开始 |
:parent | 匹配所有包含其他元素的元素 |
:password | 匹配所有密码输入元素 |
:pseudo | 翻译一个伪元素(默认不支持伪元素,但可以被子类覆盖) |
:radio | 匹配单选按钮输入元素 |
:reset | 匹配所有重置输入元素 |
:selected | 匹配所有被选中的元素 |
:submit | 匹配所有提交输入元素 |
:text | 匹配所有文本输入元素 |
下面是一些使用案例
html='''
<html>
<head>
<title>一个 HTML 页面</title>
</head>
<body>
<p>body 元素的内容会显示在浏览器中。</p>
<p>title 元素的内容会显示在浏览器的标题栏中。</p>
<p>有序列表:</p>
<ol>
<li>play</li>
<li>as</li>
<li>a pythoner</li>
</ol>
<input type="reset"/>
<div><input type="file"/></div>
<select