Python数据分析网络爬虫学习

Jessica ·
更新时间:2024-11-13
· 580 次阅读

人的一大特性就是喜欢拖延,看了不少时间管理的教材,道理我都懂,可就是不想动。最终,还是因为买了新键盘,就特别想敲敲它,果真是个喜新厌旧的女人,哈哈,不贫了。在开学之前,我计划把学校提供的人工智能方向的实验做完,一边做一边写文章,内容真的都很不错,很适合我这样的人工智能小白入门。

1.实验准备 1.1 实验概述

本实验目的为获取2020年04月北京空气质量指数日历史数据,并保存为csv文件。

HTTP请求-是指从客户端到服务器端的请求消息。包括:消息首行中,对资源的请求方法、资源的标识符及使用的协议。我们使用requests库来操作。 Selenium集成了WebDriver API,WebDriver旨在提供一个更简单、更简洁的编程接口。Selenium-WebDriver是为了更好地支持动态web页面而开发的,页面的元素在没有页面本身被重新加载的情况下可能会发生变化。 WebDriver的目标是提供一个设计良好的面向对象的API,为现代高级web应用程序测试问题提供改进的支持。我们用来进行动态页面的抓取任务。

Selenium: 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。 但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高

XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。 XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择。

NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。

**pandas **是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

1.2 实验目的 理解http request请求 学会使用WebDriver PhantomJS获取页面数据 使用lxml etree解析获取到的html文本信息 结合numpy、pandas显示数据,并保存为csv文件 1.3 实验环境 服务器端:python3.6以上、webdriver、PhantomJS、lxml、numpy、pandas、Jupyter Notebook 客户端:Google Chrome浏览器 2. 实验步骤 2.1 导入所需包 import requests from selenium import webdriver #etree解析html数据 from lxml import etree import numpy as np import pandas as pd import time 2.2 爬取数据 driver = webdriver.PhantomJS("/home/student/env/phantomjs-2.1.1-linux-x86_64/bin/phantomjs")#注:存放路径 ## 调用环境变量指定的PhantomJS浏览器创建浏览器对象 #URI格式 转换 https://www.aqistudy.cn/historydata/daydata.php?city=北京&month=202004 driver.get("https://www.aqistudy.cn/historydata/daydata.php?city=%E5%8C%97%E4%BA%AC&month=202004") #并使用driver对象调用get方法获取网页数据, time.sleep(1) html = driver.page_source #获取到的页面信息可以使用page_source获取,保存在html对象中。一定要认真分析html对象中的文本信息,后续需要解析。 html = etree.HTML(html) #之后使用etree解析html格式内容,并重新保存在html对象中。 print(html) driver.quit() #完成获取页面任务后,driver对象调用quit函数退出。 2.3 解析数据 #利用xpath获取标题信息['日期', 'AQI', '质量等级', 'PM2.5', 'PM10', 'SO2', 'CO', 'NO2', 'O3_8h'] title_list = html.xpath("//*/tbody/tr/th/text()") date_list = html.xpath("//*/tbody/tr/td[1]/text()") AQI_list = html.xpath("//*/tbody/tr/td[2]/text()") level_list = html.xpath("//*/tbody/tr/td[3]/span/text()") PM2_list = html.xpath("//*/tbody/tr/td[4]/text()") PM10_list = html.xpath("//*/tbody/tr/td[5]/text()") SO2_list = html.xpath("//*/tbody/tr/td[6]/text()") CO_list = html.xpath("//*/tbody/tr/td[7]/text()") NO2_list = html.xpath("//*/tbody/tr/td[8]/text()") O3_8h_list= html.xpath("//*/tbody/tr/td[9]/text()") 2.4 保存数据 结合numpy、pandas显示数据,并保存为csv文件 data = [date_list,AQI_list,level_list,PM2_list,PM10_list,SO2_list,CO_list,NO2_list,O3_8h_list] data = np.array(data) data = data.T data = pd.DataFrame(data,columns=title_list) data data.to_csv("201905.csv"

下面是显示

import csv csv_reader=csv.reader(open('201905.csv',encoding='utf-8')) for row in csv_reader: print(row)

结果如下
原创文章 12获赞 7访问量 460 关注 私信 展开阅读全文
作者:黑芝麻大汤圆



爬虫 python数据分析 学习 网络爬虫 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号