python+selenium+phantomjs抓取网页数据
相信各位coder经常会接触到一些关于爬虫方面的程序,因为我们需要数据。这种情况下,会有一些网站十分神奇,用ajax异步加载数据,甚至更甚者异步加载还用了setTimeout
函数来设置过上几秒再请求数据来渲染。这个时候就需要用特殊的手段了,有兴趣的童鞋可以进来看看python+selenium+phantomjs抓取网页数据。
首先我们需要做的是,配置环境,这个必不可少(不过python的环境安装就不多废话了,自行百度)。
1.安装selenium(我是python3的环境)
使用命令 pip install selenium 回车等上会儿就OK。
2.安装phantomjs
这个不用太纠结,直接百度,进官网下载就行了,Linux下载Linux对应版本,Windows下载Windows对应版本。下载后解压到要放的位置即可(解压完后将bin目录配置到环境变量的PATH(Linux)或者Path(Windows)里,这个也可以不配,稍后讲区别)。
3.开始上代码
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get(url)
# 在需要停止上一段时间再拿数据的时候需要执行sleep函数
sleep(sleep_time)
data = driver.page_source.encode("utf-8")
driver.close()
return data.decode("utf-8")
这段代码是配置了环境变量的情况。直接用webdriver.PhantomJS()实例化一个Phantom浏览器
这里就稍稍提一下了,Phantom实质上就是一个浏览器,我们在进行拿数据的时候,把他当浏览器来用就行了,比如加载一个页面,加载完毕后,使用page_source函数直接可以拿到当前页面的数据
但是有ajax异步加载的时候,甚至更甚者异步加载还用了setTimeout函数来设置过上几秒再请求数据来渲染,这个时候,phantom作为浏览器的特性就出来了,你等上setTimeout规定的秒数,再执行page_source函数,就可以拿到加载出来的数据了。
还有的情况就是,有的页面需要点击加载更多,这个时候我们就可以使用find_element_class_name函数来进行模拟点击,然后再执行page_source函数,就可以拿到加载出来的数据了,简而言之,phantom就是一个浏览器,你平时怎么用浏览器的,就怎么用他,只是换成了通过代码来操作而已。相信难不倒在座的各位coder。
driver = webdriver.PhantomJS(executable_path="你的phantomjs.exe的绝对路径")
driver.get(url)
# 在需要停止上一段时间再拿数据的时候需要执行sleep函数
sleep(sleep_time)
data = driver.page_source.encode("utf-8")
driver.close()
return data.decode("utf-8")
这个是没有配置环境变量需要的,就多了一句
executable_path="phantomjs.exe的绝对路径"
以上就是我用的过程了。有疑问的童鞋可以留言,我进行更改或者回复。谢谢支持。