由于之前用urlib和request发现只能获取静态网页数据,目前爬取动态网页有两种方法,

(1)分析页面请求

(2)Selenium模拟浏览器行为(霸王硬上弓),本文讲的就是此方法

一、安装selenium

  1. 首先下载selenium

进入pip.exe目录

(一般在python安装目录Scripts文件夹下,如..\Python34\Scripts)

运行安装命令:pip install selenium

2.下载geckodriver

geckodriver为Selenium Firefox 官方Webdriver

在如下路径可下载

     https://github.com/mozilla/geckodriver/releases

下载解压后将geckodriver.exe文件放在python可执行文件python.exe同一目录之中

ps:需要对应Firefox 45以上版本,selenium需要3以上版本

二、测试代码:python版本:3.4.3,python IDE:pycharm4.0.4

#coding=utf-8from selenium import webdriver
from selenium.common.exceptions import StaleElementReferenceException
'''
from bs4 import BeautifulSoup
import requests
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素
from time import sleep
'''#将webdriver获取的WebElements类型数据转换为列表存储
def elementsToList(WebElements):data = []#print('类型:' + type(WebElements).__name__)if(type(WebElements).__name__ != "list"):print("WebElements参数数据类型错误")return datatry:for element in WebElements:#if(element)#print(element.text)data.append(element.text)#print(element.text)except StaleElementReferenceException as e:print('页面发生了重载,之前定位的元素失效,错误信息%s:' % e)return data#获取网页指数行情信息
def getIndexInfo(url):browser = webdriver.Firefox()#browser = webdriver.Chrome()#url = 'http://quote.eastmoney.com/center/gridlist.html#global_euro'browser.get(url)current_page = 0next_page = 1while(current_page != next_page):  #当下一页码数不等于上一页码数则判断到了最后一页# print(browser.page_source)# print(browser.current_url)#browser.implicitly_wait(30)  #隐私等待# 获取当前页数号码current_page = browser.find_element_by_class_name('paginate_button.current')print('当前页:', current_page.text)# 获取下一页按钮位置element = browser.find_element_by_id('main-table_next')   # 或者用这个方式查找  element = browser.find_element_by_class_name('next.paginate_button')#获取行情字段信息indexname_elements = browser.find_elements_by_class_name('global-index-name')   # 指数名称price_elements = browser.find_elements_by_class_name('listview-col-Close')    # 最新价change_elements = browser.find_elements_by_class_name('listview-col-Change')  # 涨跌额changeprecent_elements = browser.find_elements_by_class_name('listview-col-ChangePercent')  # 涨跌幅open_elements = browser.find_elements_by_class_name('listview-col-Open')  # 开盘价high_elements = browser.find_elements_by_class_name('listview-col-High')  # 最高价low_elements = browser.find_elements_by_class_name('listview-col-Low')    # 最低价preclose_elements = browser.find_elements_by_class_name('listview-col-PreviousClose')  # 昨收价amplitude_elements = browser.find_elements_by_class_name('listview-col-Amplitude')     # 振幅updatetime_elements = browser.find_elements_by_class_name('listview-col-LastUpdate')   # 最新更新时间# 获取各行情字段列表indexname_list = elementsToList(indexname_elements)price_list = elementsToList(price_elements)change_list = elementsToList(change_elements)changegpercent_list = elementsToList(changeprecent_elements)open_list = elementsToList(open_elements)high_list = elementsToList(high_elements)low_list = elementsToList(low_elements)preclose_list = elementsToList(preclose_elements)amplitude_list = elementsToList(amplitude_elements)updatetime_list = elementsToList(updatetime_elements)#合并为列表形式index_info = list(zip(indexname_list, price_list, change_list, changegpercent_list,  open_list, high_list, low_list, preclose_list, amplitude_list, updatetime_list))for index in index_info:print('指数行情:', index)# 点击下一页element.click()# 获取下一页页码号数next_page = browser.find_element_by_class_name('paginate_button.current')print('下一页:', next_page.text)browser.close()  # 关闭该页面browser.quit()   # 浏览器退出#url = 'http://quote.eastmoney.com/center/gridlist.html#global_america'  # 美洲股市
#url = 'http://quote.eastmoney.com/center/gridlist.html#global_euro'  #欧洲股市
url = 'http://quote.eastmoney.com/center/gridlist.html#global_asia'  # 亚洲股市
try:getIndexInfo(url)
except Exception as e:print('错误信息:%s' % e)

运行结果如下:

总结

用selenium模拟网页点击获取多页数据方法效率较慢,且对于多页数据,经常出现如下错误,

错误信息:

Message: The element reference of <td class=" listview-col-Change"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed

页面发生了重载,之前定位的元素失效,需重新定位元素(方法自行百度)

建议动态爬取多页数据时不用Selenium,用分析页面请求方法,此方法待进一步实验研究......

Windows下利用python+selenium+firefox爬取动态网页数据(爬取东方财富网指数行情数据)相关推荐

  1. 爬取东方财富网股票行情数据和资讯

    爬取东方财富网股票行情数据和资讯 这个需求源于我的一个练手项目 本篇博客参考:https://zhuanlan.zhihu.com/p/50099084 该博客介绍的东西本博客不做论述 使用技术: 语 ...

  2. python爬取动态网页_python爬取动态网页数据,详解

    原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...

  3. scrapy爬取动态网页_scrapy_splash 爬取 js 加载网页初体验

    最近打算学习 scrapy_splash 来爬取 js 加载的动态网页 selenium 实在太慢了,不在迫不得已的情况下并不推荐使用 下面,直接开始吧 目标网站 JD 某商品 环境需求 已安装 do ...

  4. windows下搭建python+selenium环境(批量删除sina微博)

    1.安装python https://www.python.org/downloads/release/python-343/ 2.安装setuptools(python的基础包工具) 下载地址:ht ...

  5. windows下利用python 2.7获取电脑上所有的wifi名称和密码

    # -*- coding: UTF-8 -*- import os import sysreload(sys) sys.setdefaultencoding('utf-8')# 定义一个函数check ...

  6. 利用python+selenium爬取derwent数据库上的patents

    利用python+selenium爬取derwent数据库上的patents 需求: 登陆web of science,并进入derwent数据库,按照公司excel列表依次进行搜索,并将所有搜索道德 ...

  7. Python之网络爬虫(selenium爬取动态网页、爬虫案例分析、哈希算法与RSA加密)

    文章目录 一.selenium爬取动态网页 二.爬虫案例分析 三.哈希hash算法与RSA加密 一.selenium爬取动态网页 1.动态网页认知 爬虫其实就是在模仿浏览器的行为 应对要多次数据的交互 ...

  8. windows环境下利用python进行CGI配置

    windows环境下利用python进行CGI配置(win10,visual stdio 2017中的python3.6) 写在前面,初学python,看到python的CGI编程这一章的时候尝试在教 ...

  9. chrome动态ip python_用Python爬虫爬取动态网页,附带完整代码,有错误欢迎指出!...

    系统环境: 操作系统:Windows8.1专业版 64bit Python:anaconda.Python2.7 Python modules:requests.random.json Backgro ...

最新文章

  1. centos环境变量设置
  2. java的构造函数格式_java – 自定义MapReduce输入格式 – 找不到构造函数
  3. mysql数据库报Access denied for user 的解决方法
  4. [以太坊源代码分析] I.区块和交易,合约和虚拟机
  5. NO1:在Windows端安装SecureCRT来连接Linux
  6. java jsoup获取cookie_java – 如何使用jsoup维护变量cookie和会话?
  7. dw中HTML修改背景图片,dreamweaver将一个图片设定背景,用代码怎么写?
  8. r语言 tunerf函数_R语言非参时间序列(六):波动脉冲响应(VIR)中的关键公式推导...
  9. Android空调遥控器代码,空调代码—万能遥控器要如何正确设置空调代码?
  10. java 内嵌chrome_[Java教程]Jcef内嵌浏览器windows版本的编译及使用
  11. 网店系统SHOP++、V5shop、shopex全程分析比较
  12. 【阿里云镜像】配置阿里云Maven 镜像
  13. Java并发——Executor框架详解(Executor框架结构与框架成员)
  14. Vue如何引入粒子特效
  15. mySQL的备份及导入
  16. 天津市科技领军企业和领军培育企业补助奖励及认定条件,补贴500万
  17. HTML网页实现自动刷新
  18. jmeter具体操作
  19. 单片机编程软件很简单(九),Keil单片机编程软件高级调试技巧讲解
  20. 许昌学院计算机专业是几本,2017年许昌学院是几本?许昌学院怎么样?

热门文章

  1. 安全用电管理平台在靖边博物馆安全用电管理系统的应用
  2. ensp报系统本机计数器无法使用
  3. HTML大学班级活动网页设计 、大学校园HTML实例网页代码 、本实例适合于初学HTML的同学...
  4. Android权限列表permission说明,html5向右移动代码
  5. 在 Kubernetes 中部署高可用 Harbor 镜像仓库
  6. 招行信用卡绑定Google Checkout
  7. 2021-2027全球与中国3D网页设计服务市场现状及未来发展趋势
  8. 图片的所有格式,对应的适合于什么场景?有什么优化的方案?
  9. CBK竟然又双叒叕搞电商界前无古人大动作
  10. 弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制Opencv