Amaze UI Logo

码动指尖



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的绝对路径"


以上就是我用的过程了。有疑问的童鞋可以留言,我进行更改或者回复。谢谢支持。图标4.png


 Python

作者  :  奕弈

喵喵喵,你在心上



评论


About ME

about me

奕弈

为了最初的心,努力奋斗,从不懈怠的学习。

我不想成为一个庸俗的人。十年百年后,当我们死去,质疑我们的人同样死去,后人看到的是裹足不前、原地打转的你,还是一直奔跑、走到远方的我?

Contact ME