Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 9

项目案例

全国城市名称爬取

多方式精确抓取网络数据
项目分析及展开流程
Chrome 作为目标网页元素分析工具 Xpath 作为目标网页元素定位方

选择合适的编译器,并安装 确定目标网站网址,浏览目 按照热门城市和全国城市分 按照热门城市和全国城市汇 项目输出及要点总结


爬虫必须的编程语言环境, 标网站,通过 F12 调试工具 别爬取 总解析统一爬取
配置系统环境、软件插件环 定位热门城市和全国城市网
境 页元素属性和层级结构

两类城市分别爬取程序编 两类城市统一爬取程序编
环境准备 网站分析 项目总结
写 写
环境准备
1 、安装 Python3.9.5
2 、配置系统环境变量( Path ),添加
Python 程序目录和 Python 脚本目录到系统
环境变量中
采用 Vscode 作为代码编辑器, Vscode 具
有轻便,功能强大、插件丰富、文本编辑
智能化等特点,可以边写程序边运行调试。
1 、安装中文插件
2 、安装 Python 解释器插件
3 、安装 jupyter 文本编辑插件
4 、更新 Python pip 组件、安装必要的依赖

网站分析
1 、打开 Chrome 浏览器
2 、按 F12 打开网页调试工具
3 、按调试器左上角按钮定位网
页元素
4 、定位热门城市名称在‘ //
div[@class=“bottom”]/ul/
li‘ 标签下
4 、定位全部城市名称在 './/
div[@class="bottom"]/ul/
div[2]/li‘ 标签下
两类城市分别爬取程序编写

安装抓取必须的应用包,并导入程序
%pip install requests
%pip install lxml
import requests
from lxml import etree
伪装 http 请求头,用 requests 的 get 方法获取访问 url 的返回值并将之用 etree 对
象的 HTML 实例化储存在变量里,共下面程序调用

headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
url = 'https://www.aqistudy.cn/historydata/'
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
两类城市分别爬取程序编写

# 数据解析 - 用 xpath 方法对 get 到的 HTML 整个文档中属性为 bottom 的 div 标


签下的 ul 标签下的 li 标签进行解析定位
hot_li_list = tree.xpath('//div[@class="bottom"]/ul/li')
all_city_names = []
# 解析热门城市名字 - 用 li 标签的 xpath 方法对当前 li 标签下的 a 标签下的唯一
一个文本列表元素进行循环解析定位并通过 append 方法放入 all_city_names 中
for li in hot_li_list:
hot_city_names = li.xpath('./a/text()')[0]
all_city_names.append(hot_city_names)
# 解析全部城市名字:原理同上,只是改成了属性为 bottom 的 div 标签下 ul 标
签下第二个 div 标签下的 li 标签下的 a 标签的唯一一个文本列表元素放入
all_city_names 中
city_names_list = tree.xpath('.//div[@class="bottom"]/ul/div[2]/li')
for li in city_names_list:
city_name = li.xpath('./a/text()')[0]
all_city_names.append(city_name)
两类城市汇总爬取程序编写

# 数据解析 - 按照上述网页 xpath 解析方法,对热门城市和全部城市用 ‘ |’ 连接符号进行连


接与操作,减少代码量,增加可读性,提高代码效率
a_list = tree.xpath('//div[@class="bottom"]/ul/li/a | //div[@class="bottom"]/ul/div[2]/li/a ')
all_city_names = []
for a in a_list:
a_name = a.xpath('./text()')[0]
all_city_names.append(a_name)
两种编写方法均成功爬取了数据并输出了正确结果,但联合抓取
数据的代码更简洁更易读,运行输出结果更快。 VSCODE 运行
时间前者为 0.5 秒,后者为 0.4 秒(前者扣除包安装时间)
程序运行结果,输出了 399 个全国城市,输出结果前十个为热门城市
感谢老师的教授和辛勤付出

You might also like