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

1
2
3
4
# Python2
pip install selenium
# Python3
pip3 install selenium

PhantomJs安装: PhantomJs官网下载页

创建调用PhantomJs解析函数

1
2
3
4
5
6
7
8
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解析函数

1
docker run -p 8050:8050 scrapinghub/splash

爬虫文件

1
2
3
4
5
6
7
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插件