有三种方式爬取Ajax页面
抓Json包:简单、快捷 能找到url的情况下首选使用
采用Splash插件:爬取速度快,需要Docker,部署麻烦
采用Selenium插件:爬取速度慢,需要PhantomJs
Selenium插件
Selenium 是一套完整的web应用程序测试系统,包含了测试的录制(Selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。
Selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。
首先安装selenium
库
# Python2
pip install selenium
# Python3
pip3 install selenium
PhantomJs安装: PhantomJs官网下载页
创建调用PhantomJs解析函数
def get_selenium_js_html(self, wx_url):
print "get selenuim"
# phantomjs路径根据自己路径选择
browser = webdriver.PhantomJS("./phantomjs/bin/phantomjs")
browser.get(wx_url)
time.sleep(1)
html = browser.execute_script("return document.documentElement.outerHTML")
return html
调用PhantomJs解析函数
docker run -p 8050:8050 scrapinghub/splash
爬虫文件
import scrapy
from selenium import webdriver
...
def parse(self, response):
page_html = self.get_selenium_js_html(url)
page_htmlxpath = html.fromstring(page_html)
...