爬取全国的城市名称以及“或”的简单介绍
首先是爬取全国城市名称
网址如下: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 的 “或” 你学会了吗?