python网络爬虫精解之XPath的使用说明

Python网络爬虫精解之XPath的使用说明

什么是XPath

XPath是一种XML路径语言,用于对XML或HTML文档中的元素进行定位和选择。在爬虫中,我们可以使用XPath来定位HTML中的元素,进而提取出我们需要的数据。

XPath的语法

XPath的语法由选择器和轴组成。选择器用于选择HTML中的某个元素,而轴用于指定元素之间的关系。以下是XPath的常见语法:

  • 节点选择器:nodename,例如h1
  • 属性选择器:@attribute,例如@class
  • 标签定位://tagname,例如//div
  • 层级定位://parent_tagname/child_tagname,例如//div/h1
  • 兄弟节点://parent_tagname/following-sibling::tagname,例如//div/following-sibling::p
  • 相邻节点://parent_tagname/preceding-sibling::tagname,例如//p/preceding-sibling::h1

根据需求不同,我们可灵活组合选择器和轴,来定位HTML中的元素。

XPath的使用

在Python中,我们可以使用lxml库的etree模块来实现XPath的解析。以下是使用XPath实现爬取网页信息的模板:

import requests
from lxml import etree

response = requests.get(url)
selector = etree.HTML(response.text)
data = selector.xpath(xpath)

其中,url为要爬取的网址,xpath为XPath表达式,可以是一个选择器,也可以是多个选择器组成的列表。xpath返回的结果是一个元素列表。

下面是两个使用XPath的示例:

示例一

假设我们需要爬取“电影天堂”网站中正在热映的电影名称和简介。以下是该网站的URL:

http://www.dytt8.net/index.htm

我们可以使用如下的XPath表达式来获取该网站中正在热映的电影信息:

import requests
from lxml import etree

url = 'http://www.dytt8.net/index.htm'
response = requests.get(url)
selector = etree.HTML(response.content)

# 获取正在热映的电影名称
movie_names = selector.xpath('//div[@id="menu"]/div/ul/li/a/text()')

# 获取正在热映的电影简介
movie_intros = []
for i in range(1, len(movie_names)+1):
    movie_intro = selector.xpath('//div[@id="menu"]/div/ul/li[%s]/ul/li/a/text()' % i)
    movie_intros.append(movie_intro)

输出结果:

print(movie_names)
# ['今日更新', '这周更新', '最新电影']

print(movie_intros)
# [['华语电影', '欧美电影', '日韩电视剧', '综艺娱乐视频', '国语电视剧', '港台电视剧', '海外电视剧', '动漫电视剧'], ['新推出', '最受期待', '经典电影'], ['新片', '经典旧片', '电视剧']]

示例二

假设我们需要爬取“糗事百科”网站中今日最热门的段子内容。以下是该网站的URL:

https://www.qiushibaike.com/hot/

我们可以使用如下的XPath表达式来获取该网站中今日最热门的段子内容:

import requests
from lxml import etree

url = 'https://www.qiushibaike.com/hot/'
response = requests.get(url)
selector = etree.HTML(response.content)

# 获取最热门的段子内容
texts = selector.xpath('//div[@id="content-left"]/div[@class="article block untagged mb15" and @id]/div/a[2]/text()')

print(texts)
# ['面试官问我:你能不能秒杀Java,我回答“能”(淡定)', '这样的Fe....嫩 ....真是难得啊',...]

输出结果:

print(texts)
# ['面试官问我:你能不能秒杀Java,我回答“能”(淡定)', '这样的Fe....嫩 ....真是难得啊',...]

以上两个示例均使用XPath来定位HTML中的元素,进而提取出我们需要的数据。在实际应用中,我们可根据需求使用灵活的选择器和轴,使爬虫更加高效和精准。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python网络爬虫精解之XPath的使用说明 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python如何创建TCP服务端和客户端

    当我们需要在本机或者远程服务器上实现进程间通信,就需要使用到TCP(Transmission Control Protocol)套接字编程。在Python中,我们使用socket库来实现TCP服务端和客户端。 如何创建TCP服务端 导入socket库模块 import socket 创建套接字 server_socket = socket.socket(so…

    python 2023年5月19日
    00
  • 《Python算法交易实战》——yfinace获取yahoo财经数据

    因为从2021 年11 月1 日起,用户无法从中国大陆地区使用Yahoo 产品与服务所以下面两个错误,都是代理配置的问题error:No timezone found, symbol may be delisted error:No data found for this date range, symbol may be delisted 以下是解决办法:…

    python 2023年4月17日
    00
  • Python 登录网站详解及实例

    Python登录网站是一种常见的自动化测试方法,可以帮助我们更好地测试网站的功能和稳定性。本文将介绍如何使用Python登录网站,并提供两个示例。 1. 使用requests库实现登录 我们可以使用requests库实现登录。以下是一个示例,演示如何使用requests库实现登录: import requests login_url = ‘http://ex…

    python 2023年5月15日
    00
  • Python中关于列表的常规操作范例以及介绍

    Python中关于列表的常规操作 在Python编程中,列表是一种常用的数据类型,用于表示一个有序的、可变的序列。Python提供了多种方法来操作列表,包括添加删除、修改、排序等。下面将详细介绍Python中关于列表常规操作,包括语法、参数、返回值以及示例说明。 列表的创建 在Python中,我们可以使用方括号[]来创建一个列表。下面是一个示例,演示了如何创…

    python 2023年5月13日
    00
  • python 详解turtle画爱心代码

    让我来详细讲解一下“python 详解turtle画爱心代码”的完整攻略。 什么是turtle模块? Turtle是Python内置的一个标准库,它在画布上绘制图形,可以代替人手绘画。 如何使用turtle模块画爱心? 在Python中,使用turtle模块可以轻松地画出一个漂亮的爱心,以下是具体步骤: 第一步:导入turtle模块 import turtl…

    python 2023年5月19日
    00
  • pycharm怎么创建关联文件? pycharm创建Python文件的技巧

    PyCharm创建关联文件 在PyCharm中,可以创建关联文件,例如HTML文件、CSS文件、JavaScript文件等。创建关联文件可以方便地编辑和管理相关文件。以下是详细的攻略,介绍如何在PyCharm中创建关联文件: 创建HTML文件 可以使用PyCharm创建HTML文件,并将其与Python文件关联。以下是一个示例,演示如何在PyCharm中创建…

    python 2023年5月14日
    00
  • pandas中read_csv的缺失值处理方式

    在pandas数据分析库中,read_csv()函数用于读取以逗号分隔的(csv)文件格式。在处理CSV文件时我们经常会遇到缺失值这个问题,下面是pandas中read_csv的缺失值处理方式的完整攻略。 1. 缺失值的类型 pandas中的缺失值分为两种类型: NaN:表示缺失数值的特殊浮点数,即“Not a Number”。 None:表示缺失值的Pyt…

    python 2023年6月3日
    00
  • python中下标和切片的使用方法解析

    Python中下标和切片的使用方法解析 在Python中,下标和切片是非常重要的操作。针对列表、元组、字符串等序列类型的数据结构,下标和切片可以非常方便的进行元素访问和截取等操作。 一、下标 下标是表示序列中元素位置的数字,下标从0开始计数。通过下标可以获取序列中特定位置的元素。 示例1:访问列表中的元素 lst = ["apple", …

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部