首页 > 其他分享 >学完Scrapy-Splash秒变爬虫大佬

学完Scrapy-Splash秒变爬虫大佬

时间:2023-02-13 09:56:09浏览次数:42  
标签:8050 学完 self scrapy 爬虫 Scrapy splash docker Splash

在做爬虫的时候,大多数的网页中会存在数据动态加载的部分,而且多数都是后期渲染上的。正常情况下爬虫程序仅能爬取被渲染过的数据。因此我们看到的数据也许并非是爬虫直接获取来的。

而scrapy-splash担任了一个中间人的角色,程序通过splash服务请求网站,并获得splash返回的JS渲染后的网页。

原因

像selenium、phantomjs都是常用的渲染网页的工具。

就拿selenium来说,需要通过加载一个浏览器内核来进行渲染,效率有点低。而且与Scrapy集成需要实现一个downloder middleware,操作起来有些许的复杂,对我这种懒人来说简直折磨。

而scrapy-deltafetch的出现,仅仅几行配置就解决了这些问题。

安装

模块安装

安装scrapy-deltafetch模块。

pip3 install scrapy-splash

docker容器

这里首先要安装docker服务,然后执行命令拉取splash的镜像,启动容器即可。

docker pull scrapinghub/splash
docker run -d -p 8050:8050 scrapinghub/splash --disable-private-mode

拉取docker镜像:

开放8050端口,在浏览器输入你的ip:8050,访问到如下页面表示容器启动成功。

应用

配置

在settings.py中添加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'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

「SPLASH_URL」中的IP根据实际情况来填写。

请求

原本使用Request来请求网站,这里要修改成SplashRequst。

from scrapy_splash import SplashRequest
# 原本是yield Request()
yield SplashRequest()

这样,我们访问的url是先经过splash服务的。启动程序,查看日志。

测试

render

这里先在splash提供的页面上测试一把。

splash会请求这个网页的图片、js等,并会渲染后的网页返回给程序。

代码测试

对一个url同时进行普通请求和splash请求。

def start_requests(self):
    yield Request(url=self.start_urls[0], callback=self.parse)
    yield SplashRequest(url=self.start_urls[0], callback=self.parse_splash)

def parse(self, response):
    comment = response.css('div.at-feed-ellipsis__text::text').extract()
    print('Request', comment)

def parse_splash(self, response):
    comment = response.css('div.at-feed-ellipsis__text::text').extract()
    print('SplashRequest', comment)

同时对评论区进行爬取。运行结果如下:

上述样例仅用于学习用途。

结语

就我个人而言,依赖于插件总归不如自己去看看那些动态加载的API,分析之后可以直接模拟请求获取数据。

但是使用scrapy-splash会便利很多,也没有很高的技术门槛,所以还是值得一学的。

 

标签:8050,学完,self,scrapy,爬虫,Scrapy,splash,docker,Splash
From: https://www.cnblogs.com/q-q56731526/p/17115361.html

相关文章

  • scrapy爬取图片
    classFctpItem(scrapy.Item):#definethefieldsforyouritemherelike:image_urls=scrapy.Field()images=scrapy.Field()fromscrapy.pipeli......
  • Scrapy 框架的 pipelines 参数详解
    目录pipelines的使用一个例子pipelines常用的函数pipelines的使用在pipelines.py中创建pipelines的类。(也可用默认存在的类)classPipelinesTest:defp......
  • Scrapy 框架的 spider 参数
    目录Spider的用法变量函数Spider的常用解析函数response对象相关函数Spider的用法变量#名字,要求全局唯一name='douban'#运行爬取的网址allowed_domains=['......
  • Scrapy 框架的使用
    目录从0爬取豆瓣TOP250电影榜单大概的一个规划初始准备工作创建一个爬虫项目创建一个爬虫规则进入爬虫项目修改settings.py配置文件设置日志类型使得scrapy框架不遵守......
  • windows安装python3的scrapy框架
    安装scrapy在windows安装,非常的麻烦,依赖的架包比较多,需要一步一步的安装,下载的网址https://www.lfd.uci.edu/~gohlke/pythonlibs/cp后面代表你python的版本号,例如cp35m,UI有......
  • mysql:聊聊mysql学完之后心得,从哪里学,学哪些,怎么选课程,学到什么程度。
    mysql:聊聊mysql学完之后心得,从哪里学,学哪些,怎么选课程,学到什么程度。学习完一套课程之后习惯性总结一下。首先说一下,咕咕是跟着尚硅谷的康老师学习的mysql,大家想学习的话可......
  • python打包实战:用pyinstaller打包scrapy成单个可执行文件
    前言写好的python程序要打包成windows的可执行文件,一般都是用pyinstaller。比如你要对test.py这个文件打包,一般的pyinstaller-Ftest.py就可以了。还有另一种用法,就是用s......
  • splash的使用
    splash是一个JavaScript渲染服务,利用它可以爬取动态渲染的页面一、简介功能异步处理多个网页的渲染过程可以获取渲染后页面的源代码、截图、以及页面的加载过程信息......
  • Cordova官方插件 -- Icon + SplashScreen
    Cordova快速添加Icon图标和Splash闪屏页​​官方ConfiguringIconsintheCLI文档​​  图标的配置仅需在项目的config.xml文件中添加文件路径即可.​​官方cordova-plug......
  • 爬虫工具(tkinter+scrapy+pyinstaller)
    需求介绍输入:关键字文件,每一行数据为一爬取单元。若一行存在多个and关系的关键字,则用|隔开处理:爬取访问6个网站的推送,获取推送内容的标题,发布时间,来源,正文第一段(不是图片......