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

python中xpath语法怎么用_python爬虫学习笔记:XPath语法和使用示例_第1张图片

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

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

选取节点

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

经常使用路径表达式:

python中xpath语法怎么用_python爬虫学习笔记:XPath语法和使用示例_第2张图片

实例

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

python中xpath语法怎么用_python爬虫学习笔记:XPath语法和使用示例_第3张图片

查找特定的节点

python中xpath语法怎么用_python爬虫学习笔记:XPath语法和使用示例_第4张图片

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

选取未知节点

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

python中xpath语法怎么用_python爬虫学习笔记:XPath语法和使用示例_第5张图片

选取若干路径

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

实例

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

python中xpath语法怎么用_python爬虫学习笔记:XPath语法和使用示例_第6张图片

使用技巧

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

python中xpath语法怎么用_python爬虫学习笔记:XPath语法和使用示例_第7张图片

可是对于新手能够多多尝试本身写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()能够获取标签中的文字信息。

# 结果为:璃白°

几种解析方式的性能对比

python中xpath语法怎么用_python爬虫学习笔记:XPath语法和使用示例_第8张图片

爬取豆瓣图书TOP250

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

需求分析:

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

python中xpath语法怎么用_python爬虫学习笔记:XPath语法和使用示例_第9张图片

(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

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

你可能感兴趣的:(python中xpath语法怎么用_python爬虫学习笔记:XPath语法和使用示例)