冰冻三尺,非一日之寒。数据解析——xpath(4)

爬取全国的城市名称以及“或”的简单介绍

首先是爬取全国城市名称

网址如下:https://www.aqistudy.cn/historydata/

我们打开网页进行简单的数据分析

在这里插入图片描述
我们发现我们需要爬取的名称都在 li 标签里。根据这个我们可以很简单地写我们的代码

import requests
from lxml import etree

if __name__ == "__main__":
    # UA伪装
    header = {
        "user-agnet": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36"
        }

    # 指定url
    url = "https://www.aqistudy.cn/historydata/"

    # 获取源码
    response = requests.get(url = url, headers = header).text

    # xpath 解析。热门城市名称爬取
    tree = etree.HTML(response)
    hot_city_name_li_list = tree.xpath('//div[@class="hot"]//li') # 热门城市名称的 li 标签的列表
    hot_city_name = []
    for li in hot_city_name_li_list:
        hot_city_name.append(li.xpath('a/text()')[0])
    print(hot_city_name, len(hot_city_name))
    print()

    # xpath 解析。全部城市名称爬取
    all_city_li_list = tree.xpath('//div[@class="all"]//li') # 全部城市名称的 li 标签的列表
    all_city_name = []
    for li in all_city_li_list:
        all_city_name.append(li.xpath('a/text()')[0])
    print(all_city_name, len(all_city_name))
    print()

看一下我们的运行结果

在这里插入图片描述

我们这里爬取的名称是所有城市里包括热门城市的,要是不包括,我们要获取这些城市的名称,难道要把两个列表直接加起来吗?虽然不是不行,但实际上还是多写了几行代码的。

所以在这里介绍一下 xpath 里面的 “或”(“|”)和 “or” 的作用一样

闲话少说,直接看代码

import requests
from lxml import etree

if __name__ == "__main__":
    # UA伪装
    header = {
        "user-agnet": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36"
        }

    # 指定url
    url = "https://www.aqistudy.cn/historydata/"
	
	# 获取源码
    response = requests.get(url = url, headers = header).text

	# xpath 解析。“|”的使用
    tree = etree.HTML(response)
    city_name = tree.xpath('//div[@class="hot"]//li/a/text() | //div[@class="all"]//li/a/text()')
    print(city_name, len(city_name))

运行一下

在这里插入图片描述

名称个数正好是 394 = 384 + 10

xpath 的 “或” 你学会了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值