xpath的运用

爬虫实战:使用Python和XPath解析网页
本文介绍如何利用Python的requests库和lxml的etree模块结合XPath语法来解析网页,提取如博客标题和链接等关键信息。通过实例代码展示了XPath选择器的强大功能,包括根据属性查找标签、获取文本内容等。
# coding: utf-8
import requests

# lxml 包 专门用处理一些html和xml的  打开cmd命令   输入pip install lxml
# 引入etree模块

from lxml import etree

# xpath  一组特定的规则,可以根据特殊的语法结构,匹配网页中的数据
# // 从当前的标签开始查找
# @ 表示获取属性或者根据属性查找
# //a[@class="archive-title"] 找到class为archive-title的所有的a标签
# //a[@class="archive-title"]/@href 找到class为archive-title的所有的a标签中的href属性值
# //nav[@id="top-nav"]/div/div[1] 根据id查找标签 并且找到div下第1个div
# //img 找到所有的img标签
# //div[@class="post-meta"]/p[1]/text() 获取第一个p标签中直接文本内容,不包含子标签的内容
# //div[@class="post-meta"]/p[1]//text() //双斜杠,获取包含子标签文本在内的文本内容

url = 'http://blog.jobbole.com/all-posts/'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0'
}
resposne = requests.get(url,headers=headers)

# 将html源代码转换为树形结构数据

html = etree.HTML(resposne.content)

# 根据xpath从html中提取img标签,返回的是列表,列表中存放就是找到的标签对象
# imgs = html.xpath('//img')
# for img in imgs:
#     # 查找img标签src属性值
#     src = img.xpath('@src')
#     print src
links = html.xpath('//a[@class="archive-title"]/text()')
for link in links:
    # 找到href属性值,返回的是列表,可以取出列表中的第0个元素
    href = link.xpath('@href')[0]
    title = link.xpath('text()')[0]
    print u'博客标题:%s  链接:%s'%(title, href)
NestJS 是一个用于构建高效、可扩展的服务器端应用程序的框架,它基于 TypeScript 编写,并且使用了面向对象的编程(OOP)和函数式编程(FP)的最佳实践。XPath 是一种用于在 XML 文档中定位节点的语言。在 NestJS 中使用 XPath 可以方便地对 XML 数据进行解析和处理。 在 NestJS 中使用 XPath,你可以按照以下步骤进行操作: 1. 首先,安装相关的依赖包。你可以使用 npm 或者 yarn 进行安装,例如: ``` npm install xpath ``` 2. 在你的 NestJS 项目中引入 xpath 模块: ```typescript import * as xpath from 'xpath'; ``` 3. 使用 xpath 模块的 `select` 方法来选择符合条件的节点。例如,假设你有一个 XML 文档如下: ```xml <bookstore> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="en">Harry Potter</title> <author>J.K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore> ``` 你可以使用以下代码来选择所有书籍的标题: ```typescript const xml = // your XML document as a string const doc = new DOMParser().parseFromString(xml, 'application/xml'); const select = xpath.useNamespaces({ 'ns': 'http://www.w3.org/1999/xhtml' }); const nodes = select('//ns:book/ns:title', doc); for (const node of nodes) { console.log(node.textContent); } ``` 这样就可以打印出所有书籍的标题。 希望以上信息对你有所帮助!如果你有任何其他问题,请随时提问。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值