[Python爬虫] 等待网页加载后再获取内容
2018-12-08 本文已影响1人
QuantumCC
0x0 背景
最近在学习Python爬虫的相关知识,主要是之前有一个小idea想要用Python实现,沉寂了一年,近期终于下定决心要利用假期时间首要解决此项任务,不然拖到最后都没完成,自己遗憾不说,还会养成拖沓的坏习惯,只有想法不去实现,终究不能提高。
于是乎,利用假期的时间,竟然十分顺利的完成了初期设想的大部分功能,而且运行良好。正当我准备使用时,发现有个功能需要爬取的网页发生了变化,以前使用requests.get()可以得到的内容,由于需要打开网页后加载,现在抓不到了!这个问题困扰了我差不多两天的时间,终于通过查阅资料解决,记录一下。
0x1 Selenium+PhantomJS
虽然PhantomJS因为某些内部原因暂停更新,但是相比其他的浏览器解决方案要实例化窗口,这个应该还是要高效一点吧,而且不更新不代表不能用,等以后有需求了再看别的,目前就选该解决路径了。
安装环境(此处为MacOS环境)
安装PhantomJS
- 官网下载 选择相应平台版本下载
- 设置环境变量
nano ~/.bash_profile
##将Phantomjs路径加入path中
export PATH=/Your/Path/to/Phantomjs/bin:$PATH
##保存退出
##生效
source ~/.bash_profile
- 测试
~ phantomjs
phantomjs>
安装selenium
直接用pip安装即可
pip3 install selenium --user
0x2 使用
剩下的就挺简单了,直接上代码:
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get(your_url)
html = driver.execute_script('return document.documentElement.outerHTML')
虽然selenium有很多更高级的用法,但是由于笔者之前用的是cssselect,所以就得到完整加载的HTML源码内容为短期目的,进阶使用再下一步学习吧。