Windows下利用python+selenium+firefox爬取动态网页数据(爬取东方财富网指数行情数据)
由于之前用urlib和request发现只能获取静态网页数据,目前爬取动态网页有两种方法,
(1)分析页面请求
(2)Selenium模拟浏览器行为(霸王硬上弓),本文讲的就是此方法
一、安装selenium
- 首先下载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爬取动态网页数据(爬取东方财富网指数行情数据)相关推荐
- 爬取东方财富网股票行情数据和资讯
爬取东方财富网股票行情数据和资讯 这个需求源于我的一个练手项目 本篇博客参考:https://zhuanlan.zhihu.com/p/50099084 该博客介绍的东西本博客不做论述 使用技术: 语 ...
- python爬取动态网页_python爬取动态网页数据,详解
原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...
- scrapy爬取动态网页_scrapy_splash 爬取 js 加载网页初体验
最近打算学习 scrapy_splash 来爬取 js 加载的动态网页 selenium 实在太慢了,不在迫不得已的情况下并不推荐使用 下面,直接开始吧 目标网站 JD 某商品 环境需求 已安装 do ...
- windows下搭建python+selenium环境(批量删除sina微博)
1.安装python https://www.python.org/downloads/release/python-343/ 2.安装setuptools(python的基础包工具) 下载地址:ht ...
- windows下利用python 2.7获取电脑上所有的wifi名称和密码
# -*- coding: UTF-8 -*- import os import sysreload(sys) sys.setdefaultencoding('utf-8')# 定义一个函数check ...
- 利用python+selenium爬取derwent数据库上的patents
利用python+selenium爬取derwent数据库上的patents 需求: 登陆web of science,并进入derwent数据库,按照公司excel列表依次进行搜索,并将所有搜索道德 ...
- Python之网络爬虫(selenium爬取动态网页、爬虫案例分析、哈希算法与RSA加密)
文章目录 一.selenium爬取动态网页 二.爬虫案例分析 三.哈希hash算法与RSA加密 一.selenium爬取动态网页 1.动态网页认知 爬虫其实就是在模仿浏览器的行为 应对要多次数据的交互 ...
- windows环境下利用python进行CGI配置
windows环境下利用python进行CGI配置(win10,visual stdio 2017中的python3.6) 写在前面,初学python,看到python的CGI编程这一章的时候尝试在教 ...
- chrome动态ip python_用Python爬虫爬取动态网页,附带完整代码,有错误欢迎指出!...
系统环境: 操作系统:Windows8.1专业版 64bit Python:anaconda.Python2.7 Python modules:requests.random.json Backgro ...
最新文章
- centos环境变量设置
- java的构造函数格式_java – 自定义MapReduce输入格式 – 找不到构造函数
- mysql数据库报Access denied for user 的解决方法
- [以太坊源代码分析] I.区块和交易,合约和虚拟机
- NO1:在Windows端安装SecureCRT来连接Linux
- java jsoup获取cookie_java – 如何使用jsoup维护变量cookie和会话?
- dw中HTML修改背景图片,dreamweaver将一个图片设定背景,用代码怎么写?
- r语言 tunerf函数_R语言非参时间序列(六):波动脉冲响应(VIR)中的关键公式推导...
- Android空调遥控器代码,空调代码—万能遥控器要如何正确设置空调代码?
- java 内嵌chrome_[Java教程]Jcef内嵌浏览器windows版本的编译及使用
- 网店系统SHOP++、V5shop、shopex全程分析比较
- 【阿里云镜像】配置阿里云Maven 镜像
- Java并发——Executor框架详解(Executor框架结构与框架成员)
- Vue如何引入粒子特效
- mySQL的备份及导入
- 天津市科技领军企业和领军培育企业补助奖励及认定条件,补贴500万
- HTML网页实现自动刷新
- jmeter具体操作
- 单片机编程软件很简单(九),Keil单片机编程软件高级调试技巧讲解
- 许昌学院计算机专业是几本,2017年许昌学院是几本?许昌学院怎么样?
热门文章
- 安全用电管理平台在靖边博物馆安全用电管理系统的应用
- ensp报系统本机计数器无法使用
- HTML大学班级活动网页设计 、大学校园HTML实例网页代码 、本实例适合于初学HTML的同学...
- Android权限列表permission说明,html5向右移动代码
- 在 Kubernetes 中部署高可用 Harbor 镜像仓库
- 招行信用卡绑定Google Checkout
- 2021-2027全球与中国3D网页设计服务市场现状及未来发展趋势
- 图片的所有格式,对应的适合于什么场景?有什么优化的方案?
- CBK竟然又双叒叕搞电商界前无古人大动作
- 弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制Opencv