python中xpath语法怎么用_python爬虫学习笔记:XPath语法和使用示例

f64b8694faf33a96d86f119115c73e25.png

python爬虫:XPath语法和使用示例

XPath(XML Path Language)是一门在XML文档中查找信息的语言,能够用来在XML文档中对元素和属性进行遍历。html

选取节点

XPath使用路径表达式来选取XML文档中的节点或者节点集。这些路径表达式和咱们在常规的电脑文件系统中看到的表达式很是类似。python

经常使用路径表达式:

ace73a1625ac98725be2d1e20220b69c.png

实例

在下面的表格中,列出一些路径表达式以及表达式的结果:浏览器

8bd16402a3cd7657f35bc8f8f228a558.png

查找特定的节点

b22489dc364cd1998e1647e41e0c0016.png

注意点:在xpath中,第一个元素的位置是1,最后一个元素的位置是last(),倒数第二个是last()-1。python爬虫

选取未知节点

XPath通配符可用来选取未知的XML元素。性能

70627cfdc3c879504bec82e509fb0ac3.png

选取若干路径

经过在路径表达式中使用"|"运算符,您能够选取若干个路径。url

实例

在下面的表格中,列出一些路径表达式以及表达式的结果:spa

905180ada68261c4d85666ee3d99cf49.png

使用技巧

在通常的爬虫实战中,XPath路径能够经过谷歌浏览器或火狐浏览器中复制获得,以下图:3d

d98c74b65eaca76634c5faa0f77a8985.png

可是对于新手能够多多尝试本身写XPath路径,由于有时候复制获取的XPath路径过长,而本身写的更简洁些。code

例子:xml

import requests

from lxml import etree

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'

}

url = 'http://www.qiushibaike.com/text/'

res = requests.get(url, headers=headers)

selector = etree.HTML(res.text)

id = selector.xpath('//div[@class="article block untagged mb15 typs_long"]/div[1]/a[2]/h2/text()')

print(''.join(id).strip())

# 注意:经过/text()能够获取标签中的文字信息。

# 结果为:璃白°

几种解析方式的性能对比

412df9d017e6c695f35f574404593943.png

爬取豆瓣图书TOP250

爬取的例子直接输出到屏幕。

需求分析:

(1)要爬取的内容为豆瓣图书top250的信息,以下图所示:

a5e01e1a4a59e3518cfb0c563c6f1c68.png

(2)所爬取的网页连接: https://book.douban.com/top250?start=0

(3)须要爬取的信息有:书名,书本的连接,做者,出版社,出版日期评分和评价。

具体代码以下:

# -*- encoding:utf8 -*-

# 爬取豆瓣图书TOP250。

import requests

from lxml import etree

# 请求头,用来模拟浏览器

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'

}

def get_info(url):

res = requests.get(url, headers=headers).text

# lxml库的etree解析html

selector = etree.HTML(res)

# 获取的是一页中全部的书本信息,每本的因此信息都在类为item的tr下面。

infos = selector.xpath("//tr[@class='item']")

for info in infos:

# 书名

name = info.xpath('td/div/a/@title')[0]

# 书的连接地址

book_url = info.xpath('td/div/a/@href')[0]

# 获取的是书本的基本信息,有做者和出版社,和出版日期...

book_infos = info.xpath('td/p/text()')[0]

# 做者

author = book_infos.split('/')[0]

# 出版社

publisher = book_infos.split('/')[-3]

# 出版日期

date = book_infos.split('/')[-2]

# 价格

price = book_infos.split('/')[-1]

# 书本的评分

rate = info.xpath('td/div/span[2]/text()')[0]

# 下面的评论

comments = info.xpath('td/p/span/text()')

# 这里单行的if语句是:若是comments的长度不为0时,则把comments的第1个元素给comment,不然就把"空"赋值给comment

comment = comments[0] if len(comments) != 0 else "空"

print(name + " " + book_url + " " + book_infos + " " + author + " " + publisher + " " + date + " " + price + " " + rate + " " + comment)

print()

# 获取下一页的url

if selector.xpath("//span[@class='next']/a"):

next_pag = selector.xpath("//span[@class='next']/a/@href")

get_info(''.join(next_pag))

if __name__ == "__main__":

url = 'https://book.douban.com/top250'

get_info(url)

部分结果以下图所示:

d593aedfdda9bacfed9036da8d91fc28.png

来源:本文为第三方转载,若有侵权请联系小编删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值