一、关于phantomjs

1、介绍

PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程。由于没有界面,它的使用就有点像curl, lynx之类的命令行式文本浏览器。但PhantomJS远不是文本浏览器那么简单,由于它是基于webkit内核的,因此拥有的完善的Javascript解析、页面渲染功能,你完全可用它来模拟一个现代浏览器在加载网页时所做的各种事件。
但是,PhantomJS早已宣布暂停开发,所有之前的关于PhantomJS 2.1.1之后的版本开发计划也已全部废弃。接下来,为了防止混淆,被废弃的版本的源码和二进制包也会被删除。在未来的通知之前,PhantomJS 2.1.1将会是已知最后的稳定版本。
值得一提的是chrome和firefox也开发出了他们的headless版本,selenium的最新版本转而支持chrome和firefox的headless版本,不建议使用phantomjs。大家以后可能要告别phantomjs了。
趁着selenium现有版本还能使用phantomjs2.1.1,赶紧使用一下。

2、下载phantomjs

网址:phantomjs下载

3、安装phantomjs

1)解压到合适路径;
2)将phantomjs.exe的路径复制到系统环境变量(path)中。

4、调用方式

python调用浏览器phantomjs、chrome、firefox。
from selenium import webdriver
1)driver = webdriver.phantomjs();
2)driver = webdriver.chrome();
3)driver = webdriver.firefox()。
chrome和firefox的headless版本另行学习。
本文仅对phantomjs进行讲解。

二、使用python+selenium+phantomjs爬取国家地表水水质自动监测实时数据发布系统数据

1、爬虫思路

网址:国家地表水水质自动监测实时数据发布系统
网站为动态加载页面,注意区别一般的静态页面。
右击查看网页源代码不能找到监测数据,因此跟之前的淘宝网页面有点区别。既然数据没有被写在网页源代码中,通过抓取源代码再进行正则表达式解析的方式肯定是不行的。
打开开发者工具,转到elements→审查→找到数据位置。

分析结果:
1)这个网站的数据是动态更新的,每次仅显示10多条数据,很显然返回数据不仅仅是这些;
2)当我们打开“开发者工具”,发现加载的数据全在li标签中,数据有65条;
3)表头数据在class=panel-heading的div标签的td子标签中;
4)表数据在class=grid的ul标签的tr子标签中;
5)对于使用网页动态技术的页面的抓取,需要用到phantomjs和selenium来模拟浏览器登录后对网页进行解析;
6)分析结束,开始编写代码。

2、代码

--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
import timebrowser = webdriver.PhantomJS()
print("打开网页中。。。")
browser.get("http://123.127.175.45:8082/")
print("网页响应中。。。")
wait = WebDriverWait(browser,20)
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("C:/Users/你杰哥/Desktop/python/selenium/%s_国家地表水水质自动监测系统检测数据.csv" % (data_str),index=None, encoding="GB18030")print("数据提取完成!!")

三、开始爬虫

1、ctrl+B(本人使用sublime编写python代码),执行代码;
2、执行结果;
出现了"UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead"。
这不是代码执行错误,其大意是“不要再使用phantomjs”。
3、爬虫结果(2019年8月30日和31日,爬虫了两次);
4、使用excel打开.csv文件,查看表格数据。
2019年8月30日

2019年8月31日

四、总结

1、对于动态页面的爬取,我们无法像爬取静态网页那样分析源代码进行爬虫,需要模拟浏览器登录再进行爬取数据;
2、selenium+phantomJS针对动态网页爬虫,简单可行,方便快捷;
3、虽然很快phantomJS可能很快会被淘汰,以至于无法使用,但是chrome和firefox的headless版本也可以下载进行使用了;
4、对浏览器开发者工具(ctrl+shift+I)认真研究,熟练使用,可以节省大量时间;
5、对于动态加载页面,需使用“审查”仔细研究“elements面板”。

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

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

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

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

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

  3. Python Selenium + PhantomJS爬取考拉海购商品数据

    爬完QQ音乐以后打算爬网易云音乐的,中间出了一点小状况,就改爬考拉海购了(什么状况你猜呀❛˓◞˂̶✧以后会爬完网易云音乐的!) 今天写近段时间的最后一篇,写完这篇就要开始期末复习了,寒假再来更新 进入 ...

  4. python爬取bilibili数据_python基础教程之selenium+phantomjs爬取bilibili

    selenium+phantomjs爬取bilibili 首先我们要下载phantomjs 你可以到 http://phantomjs.org/download.html 这里去下载 下载完之后解压到 ...

  5. [转载] python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器)

    参考链接: Python vars() python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造 ...

  6. python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器)

    python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python ...

  7. python + selenium多进程爬取淘宝搜索页数据

    python + selenium多进程爬取淘宝搜索页数据 1. 功能描述 按照给定的关键词,在淘宝搜索对应的产品,然后爬取搜索结果中产品的信息,包括:标题,价格,销量,产地等信息,存入mongodb ...

  8. python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

    python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库 准备阶段 在正式开始在前需要先准备好做爬虫的工具,本例使用chrome无头浏览器进行爬取工作,也可使用 ...

  9. 跌跌撞撞尝试Scrapy+Selenium+MySQL爬取与存储东方财富网股票数据

    目录 网页信息 爬虫框架 stock_spider.py(爬虫文件) items.py (爬取字段命名) middlewares.py(Selenium中间件) pipelines.py settin ...

最新文章

  1. 线程互斥和同步-- 互斥锁
  2. python django并发访问挂掉,解决django高并发时数据库连接量过大的问题(实现连接池的方法)...
  3. 修改ubuntu的sources.list源
  4. Wintel物联网平台-Windows IoT新手入门指南
  5. mysql多表成绩查询_MySQL多表数据记录查询(一)
  6. JDBC链接SQLServer2005 Express
  7. mysql 中间点策略_网易MySQL中间件的负载均衡策略及性能优化
  8. 程序员利用测试账户套现千万美元,或面临20年监禁
  9. 3-3 编程练习:jQuery键盘事件案例
  10. 【OpenCV】傅里叶变换
  11. zookeeper分布式协调服务的使用一
  12. 关于我的家乡介绍网站设计—— 大连介绍(6页) 网页设计作业 / 家乡网页设计作业,网页设计作业 / 家乡网页设计成品,网页设计作业 / 我的家乡网页设计成品模板下载
  13. aix oracle 创建实例,11gR2 for AIX使用dbca创建数据库遇到ORA-03113错误的案例
  14. 网卡82546驱动linux,英特尔网卡驱动 Intel PRO100/1000/10GbE Win7/Win8/2
  15. 1matlab像素值及统计
  16. IT是什么意思?什么是IT行业?
  17. ChatGPT官方鉴别器紧急发布!当代自相矛盾,不想却遭遇群嘲
  18. WEB、FTP服务器的搭建
  19. ui设计概念是什么?ui设计包括哪些设计?
  20. Cenots Oracle11g设置开机自启动

热门文章

  1. 分库分表下分页查询解决方案
  2. python实现xmind转excel_使用Python将xmind脑图转成excel用例(一)
  3. 为什么拼多多、趣头条、小红书工资高?
  4. APOC为Neo4j节点添加Label
  5. PHP条件控制语句的应用,PHP条件控制语句之“if语句”
  6. 生成随机数(高斯分布)
  7. 阿里巴巴IPv6应用平台引领下一代互联网
  8. K8s-K8s部署Redis高可用主从集群+哨兵模式+动态持久化数据
  9. iOS 获取汉字的拼音
  10. 日积月累Day8(为什么家庭会生病)