pyqueryAndxPath

pyqueryAndxPath

pyquery

from pyquery import PyQuery

pyquery是通过css选择器来获取网页中的标签

1.获取数据(只能是html界面)

with open('files/data.html', encoding='utf-8') as f:
    content = f.read()

2.创建PyQuery对象

html = PyQuery(content)

3.获取标签

直接在整个页面中按照css选择器获取指定标签

PyQuery对象(css选择器) - 获取指定标签

p = html('div>p')
print(p)

lis = html('li')
print(lis)

f1 = html('#f1')
print(f1)

ps = html('p')
print(ps)

在指定标签中按照css选择器获取指定标签

div1 = html('#div1')
p = div1('p')
print(p, type(p))

divs = html('.c1')
print(divs)
ps = divs('p')
print(ps)

4.获取标签的内容和属性

PyQuery对象.text() - 获取双标签的文本内容

PyQuery对象.val() - 获取标签的value属性

PyQuery对象.attr(属性名) - 获取标签指定的属性

result = html('#p1').text()
print(result)    # 我是段落2

直接获取所有的p标签的文本内容

result = html('p').text()
print(result, type(result))

单独获取所有p标签的文本内容

ps = html('p')
for x in ps:
    print('x:', PyQuery(x).text())

result = html('input').val()
print(result)

all_a = html('a')
for a in all_a:
    print(PyQuery(a).attr('href'))

xPath

from lxml import etree

xPath主要针对html文件和xml文件,解析原理:通过告诉解析器需要标签在页面中的路径来获取对应的标签

xml也是一种通用的数据格式

0.准备网页数据

with open('files/data.html', encoding='utf-8') as f:
    content = f.read()

1.创建解析器对象

根节点 = etree.HTML(html文本数据)

html = etree.HTML(content)     # <Element html at 0x1045b5e80>

2.获取节点(获取标签)

节点对象.xpath(路径)

1)标签名 - 在当前节点下找对应的子节点(相对路径)

获取html节点中名字叫body的子节点

result1 = html.xpath('body')
print(result1)   #[<Element body at 0x105501340>]

result2 = html.xpath('body/div')
print(result2)   # [<Element div at 0x10c8a23c0>, <Element div at 0x10c8a2440>, <Element div at 0x10c8a2480>]

result3 = html.xpath('body/div/img')
print(result3)   # [<Element img at 0x10e3115c0>]

div = result2[0]
print(div.xpath('a'))

2). - 写相对路径

result4 = html.xpath('./body/div/font')
print(result4)

result5 = div.xpath('./img')
print(result5)

3)/ - 绝对路径(从根节点开始写路径,而且和谁去.xpath无关)

result6 = html.xpath('/html/body/div/img')
print(result6)   # [<Element img at 0x10c78f1c0>]

result7 = div.xpath('/html/body/div/img')
print(result7)   # [<Element img at 0x10c78f1c0>]
  1. // - 从任意位置开始

//img - 获取整个页面中所有的img节点

//div/img - 获取整个页面中是div子节点的img节点

result8 = html.xpath('//p')
print(result8)

result9 = html.xpath('//div/div/p')
print(result9)

result10 = html.xpath('//div/p')
print(result10)
  1. … - 当前节点的上层节点
result11 = div.xpath('../ol')
print(result11)
  1. @ - 获取属性值

//img/@src - 获取整个页面中所有图片标签的src属性

img = html.xpath('//img/@src')
print(img)
  1. text() - 获取标签的文本内容
lis = html.xpath('//li/text()')
print(lis)

xPath的谓词

1.位置

[N] - 获取第N个(同层的第N个)

result = html.xpath('//div[1]')
print(result)

2.属性

[@属性] - 筛选出包含指定属性的标签

//p[@id] - 获取设置了id属性的p标签

result = html.xpath('//p[@id]/text()')
print(result)   #['我是段落2', '我是段落3']

[@属性=值] - 筛选出指定属性是指定值的标签

//p[@id=“p1”] - 获取id是p1的p标签

result = html.xpath('//p[@id="p1"]/text()')
print(result)   # ['我是段落2']

子标签内容 - 通过子标签的内容来对父标签进行筛选

//div[p=“我是段落5”] - 获取包含内容是"我是段落5"的p标签的div

result = html.xpath('//div[p="我是段落5"]')
print(result)

result = html.xpath('//div[span>90]/p/text()')
print(result)

3.通配符

用*表示所有

result = html.xpath('//div[@id="div1"]/*')
print(result)

result = html.xpath('//*[@*]')
print(len(result))

4.同时选取多个路径

路径1|路径2|路径3|…

result = html.xpath('//div[@id="div1"]/p/text()|//div[@id="div1"]/a/text()')
print(result)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值