有三种方式爬取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)
...


其他两篇链接

Scrapy爬取Ajax页面(一)- 抓Json包
Scrapy爬取Ajax页面(二)- Splash插件