Scrapy-splash的安装
>pip install scrapy-splash
官方的:https://github.com/scrapy-plugins/scrapy-splash#configuration
在PyCharm中直接File 里的settings中安装便好啦!
scrapy-splash模块主要使用了Splash. 所谓的Splash, 就是一个Javascript渲染服务。它是一个实现了HTTP API的轻量级浏览
Splash是用Python实现的! 安装后我们的scrapy就获取的爬取动态数据的能力!
当然真实可能没有这么简单的! 需要安装所需的启动装置 Docker
Docker 的使用配置
首先要去官网下载一个安装包(我是在windows下操作)如果是liunx 的话直接 yum install docker 下载啦
由于是外国的网站所以下载的话比较慢! https://www.docker.com/ 官网地址
要是嫌麻烦的话本人的百度云地址 https://pan.baidu.com/s/1xuh9DEZYvm9tqqL02gJ5fw 应该是最新版的
安装过程就直接点点就好啦!
这时桌面会有这三个东西!其中Docker Quicksta.. 就是Scrapy-splash启动装置!!
然后打开Docker Quicksta...
好了这样的话应该就是安装成功啦 第一次启动好像有点慢!
接下来配置我们需要的!!
# cmd中 拉取splash镜像
>docker pull scrapinghub/splash
第一次好像要下一些东西 有点烦!!
这是我用的镜像好像放到你安装docker的文件夹下也可以用https://pan.baidu.com/s/1xMi6aN1oLD1VEiBOAhDQ2g
然后运行这个会快点!
这些搞完之后 最后一步 开启 用docker运行scrapinghub/splash
>docker run -p 8050:8050 scrapinghub/splash
这时访问http://192.168.99.100:8050/
就可以看到
到此结束啦 Docker 安装成功
################################
配置我们的scrapy!
接着上一篇的PyCharm写你的scrapy项目(苦笑T_T!!) 我们来完善瓜子的爬虫!
import scrapy
from scrapy_splash import SplashRequest
from guazi.items import GuaziItem
class ErcarSpider(scrapy.Spider):
name = 'ErCar'
allowed_domains = ['www.瓜子.com']
# 爬虫列表
start_urls = ['https://www.瓜子.com/hf/buy/#bread']
# 加一个这个函数就可以啦
def start_requests(self):
'''以直接生成一个SplashRequest对象并传递相应的参数,Scrapy会将此请求转发给Splash,
Splash对页面进行渲染加载,然后再将渲染结果传递回来,此时Response的内容就是渲染完成
的页面结果'''
for url in self.start_urls:
# callback 确定回调对象 'wait'等待加载
yield SplashRequest(url=url,callback=self.parse, args={'wait': 1})
# 获取内容
def parse(self, response):
item = GuaziItem()
uls = response.css('ul.carlist.clearfix.js-top')
try:
for li in uls[0].css('li'):
# 获取车名字
item['CarInformation'] = li.css('h2::text').extract()[0].replace(' ','-')
item['CarUrl'] ="https://www.guazi.com"+li.css('a::attr(href)').extract()[0]
item['CarData'] = '-'.join(li.css('div[class=t-i]::text').extract())
item['CarPrice'] = li.css('p::text').extract()[0]
yield item
except IndexError as IE:
# 如果获取失败 在爬取一次
yield scrapy.Request(response.url, callback=self.parse)
# 获取下一页
HXS = HtmlXPathSelector(response)
xx = HXS.select('//li/a[contains(@href,"hf/buy/")]/@href')
if xx:
url = xx.extract()[-1]
newUrl = 'https://www.瓜子.com' + url
yield SplashRequest(url=newUrl, callback=self.parse, args={'wait': 1})
爬虫写完啦! 接下来就是配置啦!(settings.py)
如有兴趣文档奉上 https://github.com/scrapy-plugins/scrapy-splash#requests
# 首先将SPLASH_URL配置一下,在这里我们的Splash是在本地运行的
SPLASH_URL = 'http://192.168.99.100:8050'
# 去重过滤器
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
# 使用Splash的Http缓存
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
# 配置中间键
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
SPIDER_MIDDLEWARES = {
# 设置scrapy_splash参数
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
好啦 就这莫结束吧!开启动态爬取!nice!!! (其他的配置好像都没有动T_T!!)