python 中xpath爬虫实例详解

yizhihongxing

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实现的爬取电影下载链接功能示例

    Python实现的爬取电影下载链接功能示例 在本教程中,我们将介绍如何使用Python实现爬取电影下载链接的功能。我们将使用Python的requests和BeautifulSoup库来实现这个功能。以下是一个示例代码,演示如何使用Python实现爬取电影下载链接的功能: import requests from bs4 import BeautifulSo…

    python 2023年5月15日
    00
  • Python语言生成水仙花数代码示例

    下面是关于Python语言生成水仙花数代码示例的完整攻略。 什么是水仙花数? 所谓水仙花数,指的是一个三位数,它的各位数字的立方和等于该数字本身。例如,153就是一个水仙花数,因为1^3+5^3+3^3=153。 生成水仙花数的代码实现 以下是一个Python语言生成水仙花数的简单代码示例: for i in range(100, 1000): sum = …

    python 2023年5月31日
    00
  • Python正则表达式中group与groups的用法详解

    以下是“Python正则表达式中group与groups的用法详解”的完整攻略: 一、问题描述 在Python中,我们可以使用正则表达式来匹配字符串。在匹配过程中,我们可以使用group()和groups()方法来获取匹配结果。本文将详细讲解Python正则表达式中group与groups的用法,并提供两个示例说明。 二、解决方案 2.1 group()方法…

    python 2023年5月14日
    00
  • Python字符串(String)类型

    Python中的字符串类型 字符串(String)指的是一个或多个字符的组合。在Python这门语言中,字符串必须由双引号""或者单引号”包围,格式如下: "字符串内容"’字符串内容’ 字符串中的内容可以随便书写,包含数字、字母、标点、特殊符号、中文、英文等等。 下面都是合法的字符串: “12342” ‘12345a…

    2022年11月28日
    10
  • Python爬虫Requests库的使用详情

    Python爬虫Requests库的使用详情 什么是Requests库 Python爬虫是一个重要的数据收集方式,而Requests库是Python中最流行的爬虫库之一。Requests库提供了一种非常简单的方式来向URL发送各种HTTP请求,并获取响应。它支持HTTP协议的所有主要方法,如GET、POST、PUT、DELETE等。 安装Requests库 …

    python 2023年5月14日
    00
  • scrapy爬虫 简单入门

    1. 使用cmd+R命令进入命令行窗口,并进入你需要创建项目的目录 cd 项目地址 2. 创建项目 scrapy startproject <项目名> cd <项目名> 例如 scrapy startproject quote cd quote 3. 编写item.py文件(定义需要爬取的文件) import scrapy class…

    爬虫 2023年4月16日
    00
  • python 比较2张图片的相似度的方法示例

    Python中可以使用OpenCV库对图片进行处理和比较。OpenCV提供了两种常用的图片相似度比较方法:均方误差(MSE)和结构相似性指标(SSIM)。 1. 均方误差(MSE)方法 均方误差是一种测量两个信号间差异程度的方法。对于图像相似度比较,均方误差是指两幅图像所有像素点的对应差值的平方和的平均值。 使用Python中的OpenCV库实现MSE方法相…

    python 2023年5月18日
    00
  • Python numpy.transpose使用详解

    非常感谢您对于Python numpy.transpose使用的关注。下面是详细讲解的攻略。 Python numpy.transpose使用详解 概述 numpy.transpose() 函数用于对换数组的维度。对于一维数组,它就是将原数组翻转。对于二维数组,就是执行矩阵转置的操作。更高维度的数组操作,是基于这两个维度的操作,多次使用transpose()…

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