想爬取https://www.aqistudy.cn/空气质量网上的河北省空气历史数据,

之前使用python写过基于scrapy的爬虫,想故技重施发现爬取不到想要的数据,仔细看过网页源代码后发现表格中的数据是动态加载的,使用开发者工具想要查看传输的数据结果

发现数据被加密了,百度过解决办法后决定选择selenium实现动态的数据爬取

一、什么是selenium?

selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,selenium用于爬虫,主要是用来解决javascript渲染的问题

二、selenium基本实现

1.声明浏览器对象

browser=webdriver.Chrome('C:\ProgramFiles(x86)\Google\Chrome\Application\chromedriver.exe')
在这里需要安装相应的webdriver需要注意两点
(1)是下载时注意浏览器版本和webdriver的版本号对应
(2)网上关于webdriver安装都要求配置环境变量,本人经实验发现程序还是会报找不到path,因此我直接将webdriver放在chrome路径下,而后在声明时直接贴上路径

2.访问页面
browser.get("http://www.baidu.com")
在这里我观察了空气质量网的url,发现格式为
https://www.aqistudy.cn/historydata/daydata.php?city=城市名&month=年月
3.查找元素与selenium操作
这里selenium提供了很多函数让我们进行操作,其中很关键的两个就是通过xpath查找元素find_elements_by_xpath以及JavaScript的执行命令execute_script,而我就很厉害了,pands中有一个函数叫做read_html
pd.read_html(browser.page_source, header=0)[0]
通过它的实现我直接获得页面中表格的dataframe格式,怎么处理当然就是任我揉捏了
3.关闭browser
browser.close()
 

在执行过程中,出现了爬取结果为空的情况,判断原因为页面未加载完成,设置time.sleep(1)发现并不能解决问题,在使用八爪鱼采集器采集过程中,发现八爪鱼对未采集到的界面的处理是重复采集,因此在采集字段后接了一条判断语句,若结果为空,则重复采集

详见代码

 1 #coding=utf-8
 2 from selenium import webdriver
 3 import cx_Oracle                                     #引用模块cx_Oracle
 4 import pandas as pd
 5 import os
 6 #若数据为空,则重复采集
 7 def paqu(uurl):
 8     browser.get(uurl)
 9     dfs = pd.read_html(browser.page_source, header=0)[0]
10     if len(dfs)>1:
11         return dfs
12     else:
13         return paqu(uurl)
14 os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'      #防止oracle数据乱码
15 conn=cx_Oracle.connect('Xho', 'sys', 'localhost:1521/orcl')    #连接数据库
16 cursor=conn.cursor()#获取cursor游标
17
18 #声明浏览器对象
19 browser = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
20 base_url='https://www.aqistudy.cn/historydata/daydata.php?city='
21 city=['石家庄','保定','唐山','邯郸','邢台','沧州','衡水','廊坊','承德','秦皇岛','张家口']
22
23 year=[201301,201401,201501,201601,201701,201801]
24 list_data=[]
25 list_row=[]
26 for p in range(len(city)):
27     for i in year:
28         for j in range(12):
29             num = i + j
30             if num > 201311 and num < 201809:
31                 uurl=base_url+city[p]+'&month='+str(num)
32                 dfs=paqu(uurl)
33                 #time.sleep(1)
34                 dfs['city']=city[p]
35                 for s in range(0, len(dfs)):
36                     date = dfs.iloc[s, 0]
37                     list_row.append(date)
38                     aqi = dfs.iloc[s, 1]
39                     list_row.append(aqi)
40                     grade = dfs.iloc[s, 2]
41                     list_row.append(grade)
42                     pm25 = dfs.iloc[s, 3]
43                     list_row.append(pm25)
44                     pm10 = dfs.iloc[s, 4]
45                     list_row.append(pm10)
46                     so2 = dfs.iloc[s, 5]
47                     list_row.append(so2)
48                     co = dfs.iloc[s, 6]
49                     list_row.append(co)
50                     no2 = dfs.iloc[s, 7]
51                     list_row.append(no2)
52                     o3 = dfs.iloc[s, 8]
53                     list_row.append(o3)
54                     chsh=dfs.iloc[s,9]
55                     list_row.append(chsh)
56
57                     list_data.append(list_row)
58                     list_row=[]
59     for n in range(len(list_data)):
60         sql = 'insert into AIR_ZL (A_DATE,AQI,GRADE,PM25,PM10,SO2,CO,NO2,O3_8H,CITY) VALUES (:A_DATE,:AQI,:GRADE,:PM25,:PM10,:SO2,:CO,:NO2,:O3_8H,:CITY)'
61         x = cursor.execute(sql, (list_data[n][0], float(list_data[n][1]), list_data[n][2],float(list_data[n][3]),float(list_data[n][4]),float(list_data[n][5]),float(list_data[n][6]),float(list_data[n][7]),float(list_data[n][8]),list_data[n][9]))
62         conn.commit();
63     list_data=[]
64 cursor.close()  # 关闭cursor
65 conn.close()  # 关闭连接
66 browser.close()

转载于:https://www.cnblogs.com/ToDoNow/p/9475067.html

学习随笔-python动态爬取空气质量网数据的实现相关推荐

  1. Python爬虫 | 爬取高质量小姐姐照片

    Python爬虫 | 爬取高质量小姐姐照片 1.数据来源分析 2.获取author_id_list和img_id 3.制作detial 4.制作detial_list 5.数据保存 6.批量获取 7. ...

  2. Python 学习 02 —— Python如何爬取数据

    文章目录 系列文章 二.Python 爬 虫 1.任务介绍 2.简介 3.基本流程 3.1.准备工作 3.1.1.分析页面 3.1.2.编码规范 3.1.3.导入模块 3.1.4.程序流程 3.2.获 ...

  3. Python 数据采集-爬取学校官网新闻标题与链接(进阶)

    Python 爬虫爬取学校官网新闻标题与链接(进阶) 前言 一.拼接路径 二.存储 三.读取翻页数据 四.完整代码展示 五.小结 前言 ⭐ 本文基于学校的课程内容进行总结,所爬取的数据均为学习使用,请 ...

  4. Python 数据采集-爬取学校官网新闻标题与链接(基础)

    Python 爬虫爬取学校官网新闻标题与链接 一.前言 二.扩展库简要介绍 01 urllib 库 (1)urllib.request.urlopen() 02 BeautifulSoup 库 (1) ...

  5. Python+scrapy爬取36氪网

    Python+Scrapy爬取36氪网新闻 一.准备工作: ​ ①安装python3 ​ ②安装scrapy ​ ③安装docker,用来运行splash,splash是用来提供js渲染服务(pyth ...

  6. python爬虫图片实例-Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: ...

  7. Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: ...

  8. python selenium爬取去哪儿网的酒店信息——详细步骤及代码实现

    目录 准备工作 一.webdriver部分 二.定位到新页面 三.提取酒店信息 ??这里要注意?? 四.输出结果 五.全部代码 准备工作 1.pip install selenium 2.配置浏览器驱 ...

  9. python爬虫爬取彼岸图网图片

    python爬虫爬取彼岸图网图片 话不多说,直接上代码! import requests from PIL import Image from io import BytesIO import re ...

最新文章

  1. 10使用CSS美化页面
  2. Qt中打开excel文件
  3. rust(54)-字符串
  4. 直播 | WWW 2021:用先验知识指导BERT注意力机制的语义文本匹配
  5. 成都东软学院新生周赛(五)
  6. C# 编写Web API
  7. 为什么 Vue2 this 能够直接获取到 data 和 methods ? 源码揭秘!
  8. python 音速_webpack多页应用架构系列(十一):预打包Dll,实现webpack音速编译
  9. android属性动画作用范围,Android 属性动画:这是一篇全面 详细的 属性动画 总结攻略...
  10. Cat.5e/Cat.6系统测试要点和常见工程问题解答
  11. 【kafka】kafka 查看 GroupCoordinator 以及 kafka Group dead 消费组死掉 以及 GroupCoordinatorRequest 使用
  12. 使用jsp页面查看jvm使用情况
  13. hdu 5187 zhx's contest
  14. Http Simulate
  15. 掘金企服:ICP经营许可证和ICP备案的区别 1
  16. neo4j CQL使用
  17. python期货基本面分析_Python股票期货交易利器,砖型图详细绘制教程!
  18. 索引格式的图片在PS软件中无法操作,怎么解决?
  19. 俄罗斯方块练习中对 swift 语言的体会
  20. 固定资产的日期之接管日期

热门文章

  1. Android视频录制--屏幕录制
  2. 高等教师资格证考试复习笔记-高等教育学-(9)- 高等学校的教学
  3. XmlPullParserException: unexpected character in markup
  4. DNS协议从入门到部署DNS服务器
  5. JCJC错别字检测系统测试说明
  6. 图片的三种可能属性:点的分布规律,数值大小,对称关系
  7. 华为x2没有鸿蒙,华为正式官宣!Mate X2其实并非重点,真正的“王牌”还在后头...
  8. 明翰经验系列之学习篇(持续更新)V1.4
  9. 新增 130 亿美元债务,马斯克要如何让 Twitter “活”下去?
  10. 告诉你C盘里的每个文件夹都是干什么用的!