cssselect:
使用模式 | 标签 |
---|---|
选择所有标签 | * |
选择<a>标签 | a |
选择所有class=”link”的元素 | .link |
选择class=”link”的<a>标签 | a.link |
选择id=”home”的<a>标签 | a#home |
选择父元素为<a>标签的所有<span>子标签 | a > span |
选择<a>标签内部的所有<span>标签 | a span |
选择title属性为”Home”的所有<a>标签 | a[title=Home] |
注:标签<a>的markdown语法:
标签 | markdown语法 |
---|---|
< | <; |
> | >; |
安装模块 | 命令 |
---|---|
lxml | pip install lxml |
cssselect | pip install cssselect |
语法
1.class带空格时使用.
(点)连接,例如:
html = '<div class="page box"><a href="/index/view/">1</a></div>'
tree = lxml.html.fromstring(html)
print tree.cssselect('div.page.box > a')[0].get('href')
输出:
/index/view/
2.css选择器的方法,先看个例子:
# -*- coding: UTF-8 -*-
import lxml.html
html = '<span class="info" title="This is title"><span>first </span><span>second</span></span>'
tree = lxml.html.fromstring(html)
L = tree.cssselect('span.info')
a = tree.cssselect('span.info')[0]
b = tree.cssselect('span.info')[0].text_content()
c1 = tree.cssselect('span.info > span')[0].text_content()
c2 = tree.cssselect('span.info > span')[1].text_content()
d = tree.cssselect('span.info')[0].get('title')
print L, type(L)
print a, type(a)
print b, type(b)
print c1, type(c1)
print c2, type(c2)
print d, type(d)
输出:
[<Element span at 0x102fdf520>] <type 'list'>
<Element span at 0x102fdf520> <class 'lxml.html.HtmlElement'>
first second <class 'lxml.etree._ElementStringResult'>
first <class 'lxml.etree._ElementStringResult'>
second <class 'lxml.etree._ElementStringResult'>
This is title <type 'str'>
注:输出没有做格式化对齐,这里排版是为了方便对比。
可以看出:
L是个列表,a是列表中的元素,类型为
<class 'lxml.html.HtmlElement'>
,目前知道可以调用的方法有text_content()
、get('title')
、get('href')
;从b可以看出,不具体到子标签可以得到父标签下所有子标签的文本;
从c1, c2可以看出,具体到子标签可以得到相应子标签的文本,分别通过list编号获取。