scrapy利用scrapy-splash爬取JS动态生成的标签

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38003892/article/details/80191572

1 引言

scrapy处理爬取静态页面,可以说是很好的工具,但是随着技术的发展,现在很多页面都不再是静态页面了,都是通过AJAX异步加载数据动态生成的,我们如何去解决问题呢?今天给大家介绍一种方法:scrapy-splash

2 准备工作

首先需要安装一下几个工具
(1)docker
(2)scrapy-splash
因为这里我的操作系统是window,所以只给出window安装docker过程(Linux自行百度,安装很方便的)

1)下载docker toolbox并解压安装即可(下载地址:https://download.csdn.net/download/qq_38003892/10391403
在这个过程中需要注意一下几个问题:
这里写图片描述
弹出这样的对话框点击安装即可

2)找到桌面上的Docker Quickstart Terminal打开,它会自动安装一些东西
3)修改pull源
注意:这里默认的pull源不是国内的,所以下载速度特别慢,这里可以通过国内的阿里云镜像库去下载,具体做法如下:
1 打开阿里云官网:https://www.aliyun.com/
2 登录->进入管理控制台
这里写图片描述
这里写图片描述
这里写图片描述
3 然后在docker 中输入 docker pull xxxxxx.mirror.aliyuncs.com/scrapinghub/splash
4 下载好之后开启splash 命令:docker run -p 8050:8050 scrapinghub/splash
5 然后在浏览器中输入
这里写图片描述
注意这里的网址 是 由你的docker IP地址决定的 端口号就是你运行splash的端口号(8050)
这里写图片描述
4)安装scrapy-splash
打开cmd 输入命令:pip install scrapy-splash

3 测试

1 创建爬虫项目(这里不多说了)
2 在settings.py中设置以下几项(若没有则添加):

SPIDER_MIDDLEWARES = {
   'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

# 渲染服务的url
SPLASH_URL = 'http://192.168.99.100:8050'

DOWNLOADER_MIDDLEWARES = {
   'scrapy_splash.SplashCookiesMiddleware': 723,
   'scrapy_splash.SplashMiddleware': 725,
   'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,

}

# 去重过滤器
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
# 使用Splash的Http缓存
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

3 创建spider,并编写
这里用这样一个例子,给大家说明
爬虫目标网站:http://39.104.87.35/findex/
爬取网站今日更新截图:
这里写图片描述
网页源码:
这里写图片描述
爬虫代码:

# -*- coding: utf-8 -*-
import scrapy
from scrapy_splash import SplashRequest

class TestSpider(scrapy.Spider):
    name = 'test'
    start_urls = ['http://39.104.87.35/findex/']

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url=url, callback=self.parse, args={'wait': 1})

    def parse(self, response):
        print(response.xpath('//ul[@id="updatelist"]/li//a/text()').extract())

爬取结果:
这里写图片描述

这样我们就大功告成了!

猜你喜欢

转载自blog.csdn.net/qq_38003892/article/details/80191572
今日推荐