使用 scrapy+ splash 爬取动态页面。
1.splash的安装
①splash的安装可参考这篇文章:https://www.jianshu.com/p/4052926bc12c
②由于是Win7系统,安装Docker ToolBox。
③安装完成后,以管理员身份运行“Docker Quickstart Terminal”。
④下载并安装secureCRT:在连接对话框输入docker的地址:默认是192.168.99.100,上面的图里看得见:),用户名:docker,密码:tcuser。
⑤在Docker中安装splash服务:
sudo docker pull scrapinghub/splash
⑥启动splash服务(通常一般使用http模式 ,可以只启动一个8050端口)
sudo docker run -p 8050:8050 -p 8051:8051 scrapinghub/splash
#Splash 将运行在 0.0.0.0 at ports 8050 (http), 8051 (https) and 5023 (telnet)。
sudo docker run -p 5023:5023 -p 8050:8050 -p 8051:8051 scrapinghub/splash
⑦服务启动后,打开浏览器输入192.168.99.100:8050查看服务启动情况。输入[www.baidu.com],点击Render me 按钮,立马可以看见在服务器端渲染后的百度页面。
2.splash与python的搭配使用
import requests
from scrapy.selector import Selector
##注意使用了192.168.99.100来替代localhost,因为localhost在win7中默认为172.0.0.1.
splash_url ="http://192.168.99.100:8050/render.html"
args= {'url':'http://quotes.toscrape.com/js','timeout':5,'image':0}
response = requests.get(splash_url,params=args)
sel = Selector(response)
sel.css('div.quote span.text::text').extract()
使用上述代码即可获取JS加载的信息,结果为:
splash最常用的两个端点:
- render.html: 提供JavaScript页面渲染服务。
- execute: 执行用户自定义的脚本(lua),利用该端点可在页面中执行JavaScript代码。