python 中xpath爬虫实例详解

Python中xpath爬虫实例详解

什么是xpath?

XPath全称为XML Path Language,即XML路径语言,它是一种用来定位XML文档中特定内容的语言。在Python爬虫中,我们可以使用XPath语法来提取网络上的HTML/XML中的信息。

Python中的XPath库

Python中有多个支持XPath的库,比较常用的是:

  • lxml:这是Python的一个解析库,同时也是XPath的解析库之一。
  • xml.etree.ElementTree:Python自带的标准库,同时也是XPath的解析库之一。

本文以lxml为例,讲解如何使用XPath进行网页数据的爬取和提取。

安装lxml库

lxml库的安装非常简单,只需要在命令行中执行以下指令即可:

pip install lxml

实例一:爬取豆瓣电影TOP250

我们将使用XPath来爬取豆瓣电影TOP250中的电影名称、评分以及电影详情页链接。

下载页面

首先,我们需要将页面下载到本地。这可以通过Python的requests库来实现,代码如下:

import requests

url = 'https://movie.douban.com/top250'
response = requests.get(url)
html = response.text

解析HTML

下载页面后,我们需要解析它。华丽的lxml库就可以派上用场了。解析代码如下:

from lxml import etree

selector = etree.HTML(html)

在这里,我们使用了etree类中的HTML()方法将HTML字符串解析为一个Element对象。要注意的是,使用HTML()方法和fromstring()方法解析HTML的方式是不同的。

编写XPath表达式

接下来,我们需要编写XPath表达式来定位我们所需的信息。需要爬取的内容分别是电影名称、评分和电影详情页链接。我们可以打开豆瓣电影TOP250的页面,在网页上选择对应内容,随便找一个电影的名称,右键点击“检查”,在弹出来的开发者工具中,选中对应的HTML代码,右键“Copy XPath”,就获得了该元素的XPath路径。

详细的XPath语法以及XPath路径的获取方法请参考这篇文章

提取数据

有了XPath路径之后,我们就可以使用lxml库提供的XPath()方法来提取数据了。代码如下:

movie_list = selector.xpath('//ol[@class="grid_view"]/li')

for movie in movie_list:
    title = movie.xpath('.//div[@class="hd"]/a/span[1]/text()')[0]
    rating = movie.xpath('.//span[@class="rating_num"]/text()')[0]
    link = movie.xpath('.//div[@class="hd"]/a/@href')[0]
    print('电影名称:' + title)
    print('评分:' + rating)
    print('电影详情页链接:' + link)
    print()

我们首先使用XPath语法定位TOP250电影的列表。然后,使用for循环遍历每个电影,提取电影名称、评分和电影详情页链接,并将其输出到控制台。

实例二:爬取全国高速公路车流量

我们将使用XPath来爬取高德地图上全国各个高速公路的实时车流量数据。

下载页面

首先,我们需要将页面下载到本地。这可以通过Python的requests库来实现,代码如下:

import requests

url = 'https://restapi.amap.com/v3/traffic/status/road?name=全国高速公路网&adcode=100000&key=4f618cfc1a58e97c7e80439b76db3842'
response = requests.get(url)
json_data = response.json()

解析JSON

通过调用requests库的get()方法,我们获得了HTTP响应,其内容为一串JSON字符串。为了使得Python可以处理这个JSON字符串,我们需要将其解析为Python的dict类型。这可以通过调用response对象的json()方法来实现,代码如下:

import json

json_data = json.loads(response.text)

编写XPath表达式

解析JSON字符串之后,我们需要编写XPath表达式来提取我们所需的数据。我们需要获取全国各个高速公路的名称以及它们各自的实时车流量。在JSON串中,这些数据位于一个名为“trafficinfo”、下面又嵌套了两个名为“description”和“roads”的JSON对象中。

提取数据

有了XPath路径之后,我们就可以使用lxml库提供的XPath()方法来提取数据了。代码如下:

traffic_info = json_data['trafficinfo']
description_list = traffic_info['description']
for description in description_list:
    road_list = description['roads']
    for road in road_list:
        name = road['name']
        tmcs = road['tmcs']
        total_jam = 0
        for tmc in tmcs:
            jam = tmc['jam']
            if jam is None:
                jam = 0
            total_jam += jam
        print('名称:' + name + ',车流量:' + str(total_jam) + '辆')

我们首先找到“trafficinfo”对象,然后找到它下面的“description”数组,遍历数组中的每个元素。然后,我们在每个“description”对象中找到名为“roads”的数组,遍历数组中的每个元素。最后,我们提取每个元素的“name”和“tmcs”字段,计算出该路段上的总车流量并将其输出到控制台。

到这里,我已经非常详细地讲解了Python中使用XPath进行网页数据的爬取和提取。希望对读者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 中xpath爬虫实例详解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python中List.count()方法的使用教程

    Python中List.count()方法的使用教程 在Python中,List是一种非常常用的数据类型,用于存储一组有序的元素。List可以包含不同类型元素,包括数字、字符串、布尔值等。List提供了种方法,包括count()方法用于计算List中某个元素现的次数。本文将详细介绍Python中List.count()方法的使用教程,包括方法的语法、返回值、…

    python 2023年5月13日
    00
  • python将list转为matrix的方法

    Python将List转为Matrix的方法 在Python中,列表(List)是一种常用的数据结构,它可以用来存储一组有序的数据。在某些情况下,我们需要将列表转换为矩阵(Matrix)来进行一些计算或操作。本文将详细介绍Python将List转为Matrix的方法。 方法一:使用numpy库 numpy是Python中常用的科学计算库,它提供了丰富的数组操…

    python 2023年5月13日
    00
  • Python爬虫与数据图表的实现

    要求: 1. 参考教材实例20,编写Python爬虫程序,获取江西省所有高校的大学排名数据记录,并打印输出。 2. 使用numpy和matplotlib等库分析数据,并绘制南昌大学、华东交通大学、江西理工大学三个高校的总分排名、生源质量(新生高考成绩得分)、培养结果(毕业生就业率)、顶尖成果(高被引论文·篇)等四个指标构成的多指标柱形图。 3. 对江西各高校…

    2023年4月11日
    00
  • Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)

    Python3中使用urllib的方法详解 在Python3中,我们可以使用urllib模块来发送HTTP请求,包括GET、POST等。本文将详细讲解如何使用urllib模块发送HTTP请求,并介绍一些常用的参数,例如header、代理、超时、认证和异常处理等。 发送GET请求 发送GET请求是最常见的HTTP请求之一,可以使用urllib模块的urlope…

    python 2023年5月14日
    00
  • Python爬虫爬取新闻资讯案例详解

    Python爬虫爬取新闻资讯案例详解 Python爬虫可以用来获取互联网上的各种数据,包括新闻资讯。本文将详细讲解如何使用Python爬虫爬取新闻资讯,并提供两个示例说明。 1. 确定目标新闻网站 首先要明确需要爬取的新闻资讯网站,比较常见的包括新浪、腾讯、网易等。不同的网站可能需要不同的爬虫策略,需要针对具体情况进行选择。 2. 分析网站结构 在确定了目标…

    python 2023年5月14日
    00
  • 信号处理程序在 python 中不起作用

    【问题标题】:signal handler not working in python信号处理程序在 python 中不起作用 【发布时间】:2023-04-06 12:42:01 【问题描述】: 我正在 Raspberry Pi 上编写一个异步视频播放程序。我需要在子进程中运行 omxplayer 并在主进程中接收输入。当接收到一些输入时,主进程会将信号发…

    Python开发 2023年4月7日
    00
  • Python密码学概述双倍强度加密教程

    下面是Python密码学概述双倍强度加密教程的完整攻略,包括了基本概念、双倍强度加密的实现方法以及两个示例。 基本概念 密码学是一门研究如何保证信息安全的学科,主要涉及到加密算法、解密算法和密钥管理,其中密钥是加密解密的关键。 双倍强度加密是一种保护数据安全的强大技术,它将一个密钥与另一个密钥结合起来,产生更高的安全性。 双倍强度加密的实现方法 Python…

    python 2023年5月14日
    00
  • 网络爬虫与web之间的访问授权协议——Robots

    网站的管理者们通常会有这样一种心态:一方面期待百度、Google这样的搜索引擎来抓取网站的内容,另一方面又很厌恶其他来路不明的网络爬虫抓取自己的信息。正是因为这样,才有“好爬虫”、“坏爬虫”这样的说法。 提到“好爬虫”,就不得不提网络爬虫与web之间的访问授权协议——Robots协议了。 Robots协议的定义Robots协议(也称为爬虫协议、机器人协议等)…

    爬虫 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部