目录
涉及知识
按照实验完成顺序:
·自动化测试:selenium
·爬虫:requests
·数据解析:json
·数据清洗
·数据分析:numpy,matpltlib,pandas
自动打开想要获取到数据的页面
(1)注意伪装好,绕过浏览器识别;
(2)反反爬。
绘制统计图
(1)注意即将绘制的图是否有缺失值等;
(2)注意查看数据问题。
初步设计过程
自动化测试
所需数据包
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
初步过程分析
(1)确定浏览器版本,下载相应驱动。
(2)防止浏览器自动关闭
option = webdriver.EdgeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option("detach", True)
driver = webdriver.Edge(executable_path='./edge driver', options=option)
(3)进入12306官网,寻找相应标签,定位元素位置(id, name, class, tag, xpath, css, link等)。
(4)一些网站具有反爬机制,反爬方式多种多样,12306中为验证码滑块,主要用到行为链,让浏览器识别不到爬虫。
具体操作:找到滑块id('nc_1_n1z'),创建对象,判断,执行。
(5) 成功登录后,有目的性地寻找所需标签,模仿鼠标与键盘响应方式。常见的一些方法如下:click(),clear(),send_keys(),perform()等。如下所示:
(6)此次实验,我没有完成最后一步,因为12306每天只有三次取消订单机会,而且我最近测试次数比较多,害怕被拉入黑名单。
(7)完成这些之后,开始爬取当前页面我们想要的数据。
爬取数据
所需数据包
import requests
import pandas as pd
import json
from tqdm import tqdm
初步过程分析
(1)确定目标网址:
如我要获取12306中从太原南到侯马西,往返,2022-11-19日的所有车票信息,网址如下图所示,除此之外,仍然要做好伪装,如下图 3.11所示,其中User-Agent(用户代理,浏览器基本身份标识),Cookie(用户信息,常用于检测是否登陆账号)都是用来伪装的。
(2)获取网页数据:
获取网页数据,也就是通过网址( URL:Uniform Resource Locator,统一资源 定位符),获得网络的数据,充当搜索引擎。当输入网址,我们就相当于对网址服务器发送了一个请求,网站服务器收到以后,进行处理和解析,进而给我们一个相应的相应。如果网络正确并且网址不错,一般都可以得到网页信息,否则告诉我们一个错误代码,比如404. 整个过程可以称为请求和响应。
常见的请求方法有两种,GET和 POST。GET请求是把参数包含在了url里面,而post请求大多是在表单里面进行,也就是让你输入用户名和秘密,在url里面没有体现出来,这样更加安全。POST请求的大小没有限制,而get请求有限制,最多1024个字节。
通过requests数据请求模块里的get请求方法,对于url地址发送请求,携带上headers请求头伪装,最后用response变量接收返回数据。
(3)解析网页数据:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。在Python中的json应用就是实现一些数据结构(列表、元组、字典)到字符串之间的转换,当数据结构变为字符串之后就很容易在程序之间传递。Python中序列化指的是将Python中的数据结构(列表、元组、字典)编码转换为JSON格式的字符串;而反序列化指的是将JSON格式的字符串编码转换为Python中的数据结构(列表、元组、字典);元组经过序列化处理后,再通过反序列化处理后,数据类型不再是元组(而是列表);但列表、字典经过序列化处理后,再通过反序列化处理后,数据类型不变。
JSON在python中分别由list和dict组成。
BeautifulSoup是用来从HTML或XML中提取数据的Python库。
(4)存储数据并分析:
解析完成后,由于数据不是很多,用不到数据库,我选择了保存在csv文本,如下:content.to_csv('data.csv',encoding='gbk'),这样会生成data.csv,可以直接文件中查询。
爬虫的目的是分析网页数据,进的得到我们想要的结论。在 python数据分析中,我们可以使用使用第三步保存的数据直接分析,主要使用的库如下:NumPy、Pandas、 Matplotlib 三个库。
NumPy :它是高性能科学计算和数据分析的基础包。
Pandas : 基于 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。它可以算得上作弊工具。
Matplotlib:Python中最著名的绘图系统Python中最著名的绘图系统。它可以制作出散点图,折线图,条形图,直方图,饼状图,箱形图散点图,折线图,条形图,直方图,饼状图,箱形图等。