Python下利用Selenium获取动态页面数据

这篇具有很好参考价值的文章主要介绍了Python下利用Selenium获取动态页面数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

利用python爬取网站数据非常便捷,效率非常高,但是常用的一般都是使用BeautifSoup、requests搭配组合抓取静态页面(即网页上显示的数据都可以在html源码中找到,而不是网站通过js或者ajax异步加载的),这种类型的网站数据爬取起来较简单。但是有些网站上的数据是通过执行js代码来更新的,这时传统的方法就不是那么适用了。这种情况下有如下几种方法:

  清空网页上的network信息,更新页面,观察网页发送的请求,有些网站可以通过这种方法构造参数,从而简化爬虫。但是适用范围不够广泛。

  使用selenium模拟浏览器行为更新网页获取更新后的数据。本文接下来着重讲述这种方法。

一、准备工作

  模拟浏览器需要用到两个工具:

  1.selenium,可直接通过pip install selenium进行安装。

  2.PhantomJS,这是一个无界面的,可脚本编程的WebKit浏览器引擎,百度进行搜索,在其官网下进行下载,下载后无需安装,放到指定路径下,在使用时只需指定文件所在路径即可。

二、使用selenium模拟浏览器

  本文爬取网站示例为:http://datacenter.mep.gov.cn:8099/ths-report/report!list.action?xmlname=1465594312346(最新测试发现网站已无法打开,2021年5月25日)

  学习示例时请不要爬取太多页面,走一遍流程了解怎么抓就行。

  打开网站后,可以看到需要爬取的数据为一个规则的表格,但是有很多页。

Python下利用Selenium获取动态页面数据 

在这个网站中,点击下一页页面的url不发生变化,是通过执行一段js代码更新页面的。因此本文思想就是利用selenium模拟浏览器进行点击,点击“下一页”后页面数据进行更新,获取更新后的页面数据即可。下面是完整代码:

# -*- coding:utf-8 -*-
  import requests
  from bs4 import BeautifulSoup
  import json
  import time
  from selenium import webdriver
  import sys
  reload(sys)
  sys.setdefaultencoding( "utf-8" )
  curpath=sys.path[0]
  print curpath
  def getData(url):
      # 使用下载好的phantomjs,网上也有人用firefox,chrome,但是我没有成功,用这个也挺方便
  driver =webdriver.PhantomJS(executable_path="C:/phantomjs.exe")
  driver.set_page_load_timeout(30)
  time.sleep(3)
  html=driver.get(url[0])  # 使用get方法请求url,因为是模拟浏览器,所以不需要headers信息
  for page in range(3):
  html=driver.page_source  # 获取网页的html数据
  soup=BeautifulSoup(html,'lxml')  # 对html进行解析,如果提示lxml未安装,直接pip install lxml即可
  table=soup.find('table',class_="report-table")
  name=[]
  for th in table.find_all('tr')[0].find_all('th'):
  name.append(th.get_text())  # 获取表格的字段名称作为字典的键
  flag=0  # 标记,当爬取字段数据是为0,否则为1
  for tr in table.find_all('tr'):
  # 第一行为表格字段数据,因此跳过第一行
  if flag==1:
  dic={}
  i=0
  for td in tr.find_all('td'):
  dic[name[i]]=td.get_text()
  i+=1
  jsonDump(dic,url[1])#保存数据
  flag=1
    # 利用find_element_by_link_text方法得到下一页所在的位置并点击,点击后页面会自动更新,只需要重新获取driver.page_source即可
  driver.find_element_by_link_text(u"下一页").click()
  
  def jsonDump(_json,name):
  """store json data"""
  with open(curpath+'/'+name+'.json','a') as outfile:
  json.dump(_json,outfile,ensure_ascii=False)
  with open(curpath+'/'+name+'.json','a') as outfile:
  outfile.write(',\n')
  if __name__ == '__main__':
  url=['http://datacenter.mep.gov.cn:8099/ths-report/report!list.action?xmlname=1465594312346','yzc']  # yzc为文件名,此处输入中文会报错,前面加u也不行,只好保存后手动改文件名……
  getData(url)  # 调用函数

  本文中获取下一页的位置是通过driver.find_element_by_link_text方法来实现的,这是因为在此网页中,这个标签没有唯一可标识的id,也没有class,如果通过xpath定位的话,第一页和其他页的xpath路径又不完全相同,需要加个if进行判断。因此直接通过link的text参数进行定位。click()函数模拟在浏览器中的点击操作。

  selenium的功能非常强大,用在爬虫上能够解决很多一般爬虫解决不了的问题,它可以模拟点击、鼠标移动,可以提交表单(应用如:登陆邮箱账号、登陆wifi等,网上有很多实例,本人暂时还没有尝试过),当你遇到一些非常规的网站数据爬取起来非常棘手时,不妨尝试一下selenium+phantomjs。

 学习安排上

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。【保证100%免费】

Python下利用Selenium获取动态页面数据

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

 文章来源地址https://www.toymoban.com/news/detail-460620.html

到了这里,关于Python下利用Selenium获取动态页面数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 利用selenium获取Chrome日志(Java版和Python版)

    1.方式一(推荐优先使用该方式) 2.方式二

    2024年02月17日
    浏览(15)
  • python爬取动态加载页面,selenium实现滚动到底

    python爬取动态加载页面,selenium实现滚动到底

    最近的写爬虫的时候遇到一些问题,就是页面是动态加载的,抓包的时候发现页码不规律,于是想到用selenium控制浏览器自动拖拽滚动到底,找了好多方法直接是加载js的不太好用,看到一个博主的能用方法,我把他贴一下。 selenium实现无限滚动、循环滚动到底 这是我自己更

    2024年02月11日
    浏览(13)
  • Python爬虫入门系列之Selenium实现动态页面爬取

    在前一篇博客中,我们学习了如何使用多线程优化爬虫程序。但是,如果要爬取的网页是动态生成的或者包含大量JavaScript代码,单纯的静态页面爬取就不足够了。为了解决这个问题,我们可以使用Selenium库来模拟真实的浏览器行为,从而实现动态页面的爬取。 Selenium是一个用

    2024年02月11日
    浏览(11)
  • Python爬虫(二十三)_selenium案例:动态模拟页面点击

    Python爬虫(二十三)_selenium案例:动态模拟页面点击

    本篇主要介绍使用selenium模拟点击下一页,更多内容请参考:Python学习指南 分享一份Python的学习资料,但由于篇幅有限,完整文档可以扫码免费领取!!! 1)Python所有方向的学习路线(新版) 总结的Python爬虫和数据分析等各个方向应该学习的技术栈。 比如说爬虫这一块,很

    2024年02月04日
    浏览(46)
  • Python Selenium 获取动态网页指定元素的超链接

    Python Selenium 获取动态网页指定元素的超链接

    本文是个人使用Python Selenium 获取动态网页指定元素的超链接的电子笔记,由于水平有限,难免出现错漏,敬请批评改正。 更多精彩内容,可点击进入Python日常小操作专栏或我的个人主页查看 熟悉Python 熟悉Requests 熟悉XPath 熟悉Selenium Python是一种跨平台的计算机程序设计语言。

    2024年01月19日
    浏览(29)
  • 04 python38的scrapy和selenium处理异步加载的动态html页面

    1.4.1 taobao_login.py模拟登陆生成cookies.json 1.4.2 taobao_login_after.py淘宝登陆后测试 修改下载中间件配置 1.6.1 添加数据模型 1.6.2 修改爬虫代码 1.6.3 测试运行爬虫

    2024年02月06日
    浏览(12)
  • 使用Selenium和ChromeDriver操作浏览器获取动态数据

    在Web开发中,有时需要爬取动态生成的数据。这些数据无法通过传统的爬虫工具获取,因为它们需要在浏览器中执行JavaScript代码才能生成。在这种情况下,可以使用Selenium和ChromeDriver来模拟人类用户的行为,操作浏览器并获取动态数据。 为了使用Selenium和ChromeDriver操作浏览器

    2024年02月09日
    浏览(49)
  • 利用Python和Selenium获取雪球网沪深上市公司日k线走势图

    利用Python和Selenium获取雪球网沪深上市公司日k线走势图

    本文介绍作者如何爬取雪球网(https://xueqiu.com/)沪深股市沪深一览中的上市公司日k线走势图并截图保存至本地~ 欢迎关注作者公众号,追踪更多更新更有价值的内容。 项目用于获取雪球网沪深股市沪深一览列表中(图1)上市公司的日K线图(图2)。 图1 沪深股市-沪深一览

    2024年04月10日
    浏览(36)
  • 利用Python爬虫获取xx数据

    利用Python爬虫获取xx数据

    目录 一、前言 二、requests 请求库 1、requests 安装 2、requests 的基本使用 三、Beautiful Soup 1、Beautiful Soup 安装 2、BeautifulSoup对象介绍与创建 3、BeautifulSoup对象的find方法 四、总结 什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,获取响应

    2024年03月20日
    浏览(8)
  • 如何利用python调用API接口获取数据进行测试

    如何利用python调用API接口获取数据进行测试

    一、Python 可以使用 requests 库来调用 API 接口获取数据。以下是基本的步骤: 1.安装 requests 库 pip install requests 2.导入 requests 库 import requests 3.构建 API 请求的 URL 根据 API 文档,构建请求的URL。 例如,  https://api.example.com/posts  是获取所有帖子的 URL。 4.发送 API 请求 使用  requ

    2024年02月11日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包