xpath:是一种在XMl、html文档中查找信息的语言,利用了lxml库对HTML解析获取数据。
Xpath常用规则:
  nodename :选取此节点的所有子节点   // :从当前节点选取子孙节点   / :从当前节点选取子节点   . : 选取当前节点   .. : 选取当前节点父节点  @ : 选取属性 1.初始化htmletree.parse()是初始化html构造一个XPath解析对象;
etree.tostring()是修复html文件中代码,把缺的头或尾节点补齐;
result.deode('utf-8')修复后的HTML代码是字节类型,转化成字符串;
Xpath规则一般用 // 开头
例: html.xpath('//*') //获取所有的节点 html.xpath('//li') //获取所有li节点 3.子节点、子孙节点 html.xpath('//li/a') //所有li下是所有直接a子节点 html.xpath('//ul//a') //所有ul下的子孙a节点 4.父节点 html.xpath('//a[@href="links.html"]/../@class') //找到所有a节点中href为links.html的父节点的class值 // .. 来实现查找父节点 5.属性匹配 html.xpath('//li[@class="item-0"]') //找到class值为item-0是节点 6.文本获取 html.xpath('//li[@class="item-0"]/a/text()') 或html.xpath('//li[@class="item-0"]//text()') 7.属性获取 html.xpath('//li/a/@href') //找到li下a中的href属性值 8.属性多值匹配 html.xpath('//li[contains(@class,"li")]/a/text()') //只要节点属性class中包含li就能匹配出来 9.多属性匹配 html.xpath('//li[contains(@class,"li") and @name="item"]/a/text()') //匹配节点属性class值为li,name值为item的节点 二、Beautiful Soup 解析Beautiful Soup是HTML或XML解析库。通过解析文档为用户提供需要抓取的的数据。
需要解析器:lxml HTML解析库、lxml XML解析库、Python标准库、html5lib基本用法:
from bs4 import BeautifulSoup soup=BeautifulSoup(html,'lxml') 1.soup.prettify()调用prettify()方法把要解析的字符串以标准的缩进格式输出
2.节点选择器:例:soup.title.string
(1)选择元素: soup.title、soup.title.sring soup.head soup.p (2)提取信息:   1)获取节点名称:soup.title.name   2) 获取属性:soup.p.attrs、soup.p.attrs['name']   3) 获取内容:soup.p.string (3)嵌套选择: soup.head.title.string (4)关联选择:   enumerate() //生成器类型python
(1)soup.p.contents //p节点下的直接子节点列表
(2)soup.p.descendants //p节点下的所有子孙节点(生成器类型)
(3)父节点和祖先节点:soup.p.partent、soup.p.parents
(4)兄弟节点:
soup.a.next_sibling
soup.a.previous_sibling
soup.a.next_siblings
enumerate(soup.a.pervious_siblings)
(5)提取信息:soup.a.next_sibling.string
##### 3.方法选择器: find_all(name,attrs,recursive,text,**kwargs)python
(1)name:find_all(name='li')
(2)attrs:find_all(attrs={'id':'list-1'})、find_all(class_='element')
(3)text:匹配节点的文本,find_all(text='字符串或正则表达式')
特:find()用法与fand_all一样,只不过只匹配第一个元素 ##### 4.css选择器 调用select()方法,传入相应css选择器python
soup.select('.panel.panel-heading')
soup.select('ul li') //所有ul下的所有li
soup.select('#list-2.element')
python
(1)嵌套选择:
for ul in soup.select('ul'):
ul.select('li')
(2)获取属性:
for ul in soup.select('ul')
ul.attrs['id']
ul['id']
(3)获取文本:
for li in soup.select('li'):
li.get_text()
lli.string
### 三、 pyquery 解析 1.初始化: (1)字符串初始化:Python
html=''' *******
'''
from pyquery import PyQuery as pq
doc=pq(html)
print(doc('li'))
doc('#container .list li') //id 为container,class为list下的所有li
##### 3.查找节点python
(1)子孙节点、子节点
.find():查找所有子孙节点
items=doc('.list')
items.find('li')
.children():查找子节点
items=doc('.list')
items.children('.active')
(2)父节点
doc=pq(html)
items=doc('.list')
items.parent()
祖先节点
items.parents()
(3)兄弟节点
doc=pq(html)
li=doc('.lsit .item-0.active')
li.siblings('.active')
##### 4.遍历 用items()函数生成列表生成器进行遍历Python
doc=pq(html)
lis=doc('li').items()
for li in lis:
print(li)
```
特:伪类选择器
选择第一个节点,最后一个节点,奇偶数节点,包含某一文本节点