这是一篇动态网页的爬虫教程,新手可以操作一下,简单实用。

一、前言

这篇blog跟python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫的爬虫思路非常类似。
但由于原来的国家地表水水质自动监测实时数据发布系统进行了改版,而且新版本的网页向我们展示了更加全面的数据,那篇blog的代码和工具已经无法顺利爬取数据了,所以爬取代码和工具需要做一个小小的修改。
针对新的国家地表水水质自动监测实时数据发布系统的网页,大家可以点击,查看一下源代码,看看有何不同。

二、查看网页源文件

打开浏览器,F12:
大家注意图中的3个地方:
1、第③个位置是数据位置;
2、如果网页返回了所有的数据,我们只需要定位这3个地方就可以一步步爬取到数据,这就跟之前的代码没什么区别了;
3、难就难在,这个网页固定返回60条数据,每一次滚动都会重新返回一下;
4、这样的话,我们怎么爬取也很难保证数据的完整性,要么冗余,要么缺失;
5、但是,仔细查看网页就会发现,网站提供另外一个接口,允许我们查看全部数据(看下图);

6、只需要点击“所有流域”,就会返回这一天内所有上报的数据;
7、我们只需要定位到“button”,点击一下(click())就可以了。
8、明白了吗?

三、代码

#--author--张俊杰@Nick
import datetime
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options     #建议使用谷歌浏览器
import time
chrome_options = Options()
chrome_options.add_argument('--headless')
#使不使用headless版本,也许你想感受一下浏览器自动打开,自动点击的快感,也不一定
browser = webdriver.Chrome(chrome_options=chrome_options,executable_path = 'C:/Users/Administrator/AppData/Local/Google/Chrome/Application/chromedriver.exe')
#chromedriver下载下来之后复制到chrome.exe同文件夹下即可
print("打开网页中。。。")
browser.get("http://106.37.208.243:8068/GJZ/Business/Publish/Main.html")
print("网页响应中。。。")
wait = WebDriverWait(browser,20)#毕竟代码运行的速度和浏览器打开的速度不再一个量级,一个闪电侠,一个奥特曼
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID,"mainframe")))#这一步很关键
browser.find_element_by_id('ddm_River').click()#模拟点击“流域”
browser.find_element_by_xpath("/html/body/div[1]/div[2]/div/ul/li[1]").click()#模拟点击“所有流域”
wait.until(EC.presence_of_element_located((By.CLASS_NAME,"grid")))#定位到数据
print("获取网页数据中。。。")
time.sleep(10)
soup = BeautifulSoup(browser.page_source,"lxml")
browser.close()
data_head = soup.select(".panel-heading")[0]
grid_data = soup.select(".grid")[0]
data_colhead = data_head.findAll("td")
data_rows = grid_data.findAll("tr")
water_df = pd.DataFrame(columns=[c.text for c in data_colhead])
print("提取网页数据中。。。")
for i,data_row in enumerate(data_rows):water_loc = water_df.iloc[:,0].valueswater_data = water_df.iloc[:,1].valuesrow_dat = [r.text for r in data_row]water_df.loc[i] = row_dat
#系统时间
data_str = datetime.datetime.now().strftime('%Y_%m_%d')
#可修改保存路径
water_df.to_csv("E:/python/国家地表水爬虫/%s_国家地表水水质自动监测系统检测数据.csv" % (data_str),index=None, encoding="GB18030")
print("数据提取完成!!")

四、代码运行

1、运行

2、运行结果(.csv)

3、数据(98条数据,数据量每一天都不一样,但不会差太多)

五、后记

网页更改之后,数据爬取往往遇到瓶颈,但只要不发生大的变动,基本代码修改下就可以了。
谢谢大家观看。

python+selenium+Chrome(无头版)爬取国家地表水水质自动监测实时数据发布系统(修改版)——动态网页爬虫相关推荐

  1. python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫

    一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...

  2. 爬取国家地表水水质自动监测实时数据发布系统!动态爬虫!

    这是一篇动态网页的爬虫教程,新手可以操作一下,简单实用. 一.前言 这篇blog跟python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统--动态网页爬虫的爬虫思路 ...

  3. python selenium不启动浏览器 爬取数据的方法

    为浏览器驱动 添加一个无头参数.可以实现不开启浏览器 爬取网页 最新版的selenium已经不再支持PhantomJS 源码如下: # -*- coding:utf-8 -*-from seleniu ...

  4. python selenium加bs4批量爬取斗鱼直播信息

    from selenium import webdriver from bs4 import BeautifulSoup import time # 返回Phantomjs对象 driver = we ...

  5. Python爬取新冠肺炎疫情实时数据(丁香园)

    腾讯和丁香园疫情数据爬虫脚本和近2个月数据可自行下载: https://download.csdn.net/download/vdrere/12400191 https://download.csdn ...

  6. python b站 排行_Python 爬取B站 视频热度排行数据

    时间:2019-03-07 概述:抓取数据 爬虫 采集 Python 爬取bilibili站 视频热度排行视频数据,有文件为 bilibili.py,只需输入一个大模块名,如游戏模块名为'game', ...

  7. 使用read_html爬取网页表哥,Python笔记:用read_html()爬取table形式表格的网络数据...

    不少对爬虫有所了解但却不会的人应该会知道,爬虫功能非常强大,但却不是太好学!但是,pandas中的read_html()用于抓取Table表格型数据时,简直是个神器.不信?我小露一手给你们看. 针对网 ...

  8. python爬取二手房信息_刚刚接触PythonR?教你爬取分析赶集网北京二手房数据(附详细代码)...

    原标题:刚刚接触Python&R?教你爬取分析赶集网北京二手房数据(附详细代码) 源 /数据森麟文 /徐涛 前言: 本文主要分为两部分:Python爬取赶集网北京二手房数据&R对爬取的 ...

  9. 基于python+selenium+Chrome自动化爬取巨潮资讯网A股财务报表

    转自同学的博客 引言: 网页爬虫分为静态网页爬虫和动态网页爬虫,前者是指索要获取的网页内容不需要经过js运算或者人工交互, 后者是指获取的内容必须要经过js运算或者人工交互.这里的js运算可能是aja ...

最新文章

  1. 公众号留言-2020-4-1
  2. matlab-代数方程
  3. memcached的基本命令(安装、卸载、启动、配置相关)
  4. 【转】Android BroadcastReceiver介绍
  5. YUI Compressor
  6. SpringBoot整合Mybatis,并实现事务控制
  7. arcgis加载dwg显示一个点_shp文件转为dwg之后在arcgis下打开属性表有高程信息但在cad里面打开为何没高程 - 地学 - 小木虫 - 学术 科研 互动社区...
  8. 从输入URL到页面渲染完成 -戈多编程
  9. java增删改查控制台_在控制台中输入增删改查 (初学者)
  10. (仅对于普通12分频的51单片机而言)机器周期,时钟周期,晶振振荡频率(fosc)的关系;(51、32通用)分频的原理和作用
  11. ajax向后台传递参数为对象实例
  12. 大一寒假训练:集训内容考试(二)【未完待续】
  13. 【财富空间】曾国藩:三分精明,七分厚道,做人最高境界
  14. FFMPEG 实现视频拼接,中间插入图片实现过渡
  15. Excel教程:规范Excel表格设计,让工作效率提升百倍不止
  16. 如果NBA也像JAVA一样面试
  17. eclipse android 不能生成r类 appt错误,Ubuntu中Eclipse新建Android project提示缺失R文件的原因及解决办法...
  18. 表示所有字符的正则表达式html,JavaScript正则表达式介绍
  19. 介绍一下三电平Boost变换器工作原理
  20. 职业建议:辞职时提前通知很重要

热门文章

  1. 黄山归来不看岳:《Java开发手册(黄山版)》新增 11 条新规约
  2. [转]MVC之 过滤器(Filter)
  3. 关闭docker进程
  4. 计算机设备中不属于输入设备的是什么,以下设备不属于计算机系统输入设备的是()...
  5. 特教培智学校计算机教案,培智学校生活教案
  6. 浅谈Javac编译原理
  7. Python:实现horizontal projectile motion平抛运动算法(附完整源码)
  8. oracle 支持64核,7nm下仅240W TDP AMD 64核霄龙处理器能效惊人
  9. Java8处理时间类
  10. 产品经理必读丨如何找准产品定位?