Python数据分析网络爬虫学习

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

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)

结果如下
csv内容显示
可以利用数据分析工具作进一步的可视化,但我有点困了,你们可以自己发挥。

小结

一个完整的文章是必须有小结的,不然我在哪里放我的鸡汤和毒鸡汤。好困好困,下次写数据分析的实验。晚安~


“男人的极大幸运在于不论成年还是小时候,他必须踏上一条极为艰苦的道路,不过这是一条最可靠的道路;女人的不幸在于被几乎不可抗拒的诱惑包围着,她不被要求奋发向上,只被鼓励滑下去达到极乐。当她发觉自己被海市蜃楼愚弄时通常为时太晚,她的力量在失败的冒险中已被耗尽。”
————波伏娃《第二性》

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值