python抓取动态网页(利用selenium的子模块webdriver的html内容解决的问题)

优采云 发布时间: 2022-03-24 10:15

  python抓取动态网页(利用selenium的子模块webdriver的html内容解决的问题)

  文章目的

  我们在使用Python爬取网页数据时,经常会用到urllib模块,它通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获取url的html内容,然后使用 BeautifulSoup 抓取某个 Tag 内容,结合正则表达式过滤。但是,使用 urllib.urlopen(url).read() 得到的只是网页的静态 html 内容。很多动态数据(如网站访问者数、当前在线人数、微博点赞数等)收录在静态html中,比如我要抓取当前在线人数本bbs网站中的每一部分,不收录静态html页面(不信你尝试查看页面源代码,只有简单的一行)。

  解决方案

  我试过网上说的浏览器自带的开发者工具(一般是F12弹出对应网页的开发者工具),查网络获取动态数据的走势,但这需要多方寻找线索网址。我个人觉得太麻烦了。另外,用查看器查看的html内容也收录动态数据,但是有几个问题:如何实时获取查看器的html内容?如何将查看器的html导入python程序?因此,使用查看器的html内容的方法也不符合爬虫的要求。

  偶然发现了selenium模块,发现这个模块可以很方便的根据url加载页面获取session,并找到当前session对应的label。本文将使用 selenium webdriver 模块来获取这些动态生成的内容,尤其是一些重要的动态数据。事实上,selenium 模块的功能并不仅限于爬取网页。它是网络自动化测试的常用模块。它广泛用于 Ruby 和 Java。虽然 Python 用的比较少,但它也是一个非常简单、高效、好用的自动化测试。模块。通过使用selenium的子模块webdriver解决动态数据的抓取问题,也可以对selenium有一个基本的了解,为进一步学习自动化测试打下基础。

  实施流程操作环境

  我在Windows 7系统上安装了Python 2.7版本,使用Python(X,Y) IDE,安装的Python库没有自带selenium,直接在Python程序中导入selenium会提示有没有这个模块,联网状态下,cmd直接进入pip install selenium,系统会找到Python安装目录直接下载、解压安装这个模块。终端提示完成后,可以查看C:\Python27\Lib\site-packages目录下是否有selenium模块。此目录取决于您安装 Python 的路径。如果有 selenium 和 selenium-2.47.3.dist-info 文件夹,则表示可以在 Python 程序中加载该模块。

  使用 webdriver 抓取动态数据

  1.先导入webdriver子模块

  从硒导入网络驱动程序

  2.获取浏览器的会话。浏览器可以使用 Firefox、Chrome、IE 等。这里我们以火狐为例

  浏览器 = webdriver.Firefox()

  3.加载页面,url本身可以指定合法字符串

  浏览器.get(url)

  4.获取到session对象后,定位元素,webdriver提供了一系列元素定位方法,常用的有以下几种方式:

  ID

  姓名

  班级名称

  关联

  文本

  部分的

  关联

  文本

  标签

  姓名

  路径

  选择器

  比如通过id定位,返回所有元素的列表,lis=borwser.find_elements_by_id_name('kw'')

  按类名定位,lis=find_elements_by_class_name('title_1')

  更详细的定位方法请参考大神《博客园-昆虫大师》的selenium webdriver(python)教程第三章-定位方法部分(第一版可百度文库阅读,第二版)版将从头开始收费>-

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线