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+PyQt5实现美剧爬虫可视工具的方法

    下面是详细讲解“Python+PyQt5实现美剧爬虫可视工具的方法”的完整攻略。 1. 确认工具需要的功能 在实现过程中,首先需要考虑的就是工具需要具备哪些功能。例如,我们要实现的美剧爬虫可视工具需要具有以下几个功能: 输入美剧名称或关键词进行搜索 展示搜索结果 点击某一集,获取该集视频的下载链接并自动复制 支持多线程下载 2. 选择编程语言和GUI库 我们…

    python 2023年6月3日
    00
  • PyQt5实现将Matplotlib图像嵌入到Scoll Area中显示滚动条效果

    下面我将详细讲解如何使用PyQt5将Matplotlib图像嵌入到Scoll Area中实现滚动条效果。具体步骤如下: 1. 导入相关库 首先需要导入相关库,包括PyQt5、Matplotlib和Numpy等,示例代码如下: import sys import matplotlib.pyplot as plt from PyQt5.QtWidgets imp…

    python 2023年6月3日
    00
  • Python发送邮件测试报告操作实例详解

    我可以为您详细讲解“Python发送邮件测试报告操作实例详解”的完整攻略。具体流程如下: 1. 安装所需依赖库 在Python环境中,我们需要使用到一些第三方的库,包括smtplib和email。 可以使用如下命令进行安装: pip install smtplib pip install email 2. 编写邮件发送脚本 在发送邮件的脚本中,我们需要完成以…

    python 2023年5月20日
    00
  • OpenCV 绘制同心圆的示例代码

    绘制同心圆是计算机视觉中常见的任务,可以使用OpenCV通过简单的代码实现。以下是绘制两个同心圆的示例代码: import cv2 # 创建一个黑色的图像 img = np.zeros((512,512,3), np.uint8) # 确定两个圆的中心坐标与半径 center1 = (256, 256) radius1 = 100 center2 = (25…

    python 2023年5月18日
    00
  • Python 使用非严格字典规则

    Python 的非严格字典规则指的是在字典定义中可以使用类似 JavaScript 对象的方式,直接使用点号操作符来访问字典中的键值对。下面是使用非严格字典规则的完整攻略: 定义字典 可以使用非严格字典规则来定义字典,示例如下: my_dict = {‘name’: ‘Bob’, ‘age’: 20, ‘gender’: ‘male’} 访问字典中的键值对 …

    python-answer 2023年3月25日
    00
  • python机器学习理论与实战(六)支持向量机

    Python机器学习理论与实战(六)支持向量机 简介 支持向量机(Support Vector Machine,简称 SVM)是一个强大的分类算法,其具有优秀的泛化能力。在本文中,我们将介绍 SVM 的原理、实现及应用。 SVM 原理 SVM 的核心思想是:找到一个可以将不同类别的数据分割开的最优超平面。其中“最优”的定义是:在所有能成功分割不同类别数据的超…

    python 2023年5月23日
    00
  • Python 实现进度条的六种方式

    Python 实现进度条的六种方式 在 Python 编程中,经常需要在程序执行某些耗时操作时实时显示进度条,以提升用户体验和程序可读性。 本篇攻略将介绍 Python 实现进度条的常用技巧,其中会涉及到六种方式,包括: 在命令行窗口打印简单进度条 在命令行窗口使用第三方库给进度条增加颜色、样式等 使用 tqdm 库在控制台中实现进度条 使用 progres…

    python 2023年5月19日
    00
  • 想开发网页爬虫,发现被反爬了?想对 App 抓包,发现数据被加密了?不要担心,这里可以为你解决。

    全面超越Appium,使用Airtest超快速开发App爬虫 想开发网页爬虫,发现被反爬了?想对 App 抓包,发现数据被加密了?不要担心,使用 Airtest 开发 App 爬虫,只要人眼能看到,你就能抓到,最快只需要2分钟,兼容 Unity3D、Cocos2dx-*、Android 原生 App、iOS App、Windows Mobile……。 Air…

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