1、python和scrapy安装,之前有介绍或者网上有很多方法,这里就不说了。
2、splash安装需要docker,docker安装也不说了,最好是linux下,windows下装docker也很麻烦,可以windows下装个虚拟机比如VMware然后装linux,再装docker。
(1)pull splash镜像
sudo docker pull scrapinghub/splash
(2)运行splash的docker服务,并通过浏览器访问8050端口验证安装是否成功
- 前台运行
sudo docker run -p 8050:8050 scrapinghub/splash
- 后台运行
sudo docker run -d -p 8050:8050 scrapinghub/splash
3、安装Scrapy-Splash
pip install scrapy_splash
4、scrapy创建项目和爬虫
scrapy startproject 项目名称
scrapy genspider 爬虫名 爬虫的地址
5、在项目的settings.py中做如下配置,其中SPLASH_URL指定了刚刚启动的Splash服务地址
SPLASH_URL = 'http://localhost:8050'
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
SPIDER_MIDDLEWARES = { 'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,}
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
#这个就是防止robots.txt不让爬取
ROBOTSTXT_OBEY
=
False
6、在爬虫文件里import scrapy下面加入
from scrapy_splash import SplashRequest
import sys
reload(sys)
sys.setdefaultencoding('utf8')
7、爬虫文件完整代码,这个是把抓取的渲染后的代码存到HTML里
import scrapy
from scrapy_splash import SplashRequest
import sys
reload(sys)
sys.setdefaultencoding('utf8')
class Hehe1Spider(scrapy.Spider):
name = 'hehe1'
allowed_domains = ['cs.xxx.com']
start_urls = ['http://cs.xxx.com/product?id=1']
def start_requests(self):
yield SplashRequest(self.start_urls[0],
callback=self.parse_splash,
args={'wait': 5}, # 最大超时时间,单位:秒
endpoint='render.html') # 使用splash服务的固定参数
def parse_splash(self, response):
with open('with_splash.html', 'w') as f:
f.write(response.body.decode())
8、注意上面的代码Request换成了SplashRequest,第一个参数是采集的网址、第二个参数是返回的方法也就是下面的parse_splash。