python抓取动态网页(利用selenium的子模块webdriver的html内容解决的问题)
优采云 发布时间: 2022-03-24 10:15python抓取动态网页(利用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)教程第三章-定位方法部分(第一版可百度文库阅读,第二版)版将从头开始收费>-