scrapy-splash 爬虫渲染异步加载,ajax

简介: 首先给出splash官网地址:http://splash.readthedocs.io/en/stable/api.html#render-html 1.安装和准备 (1)先安装scrapy-splash库: pip install scrapy-splash (2)然后将我们的docker起起来 docker run -p 8050:8

首先给出splash官网地址:http://splash.readthedocs.io/en/stable/api.html#render-html

1.安装和准备

(1)先安装scrapy-splash库:

pip install scrapy-splash


(2)然后将我们的docker起起来

docker run -p 8050:8050 scrapinghub/splash


如果关于docker安装还有更多的问题,请查考:

splash安装文档

2.配置

  1. (1)将splash server的地址放在你的settings.py文件里面,如果是你在本地起的,那地址应该是http://127.0.0.1:8050,我的地址如下
  2. SPLASH_URL = 'http://192.168.99.100:8050'


  3. (2)在你的下载器中间件:download_middleware 里面启用如下的中间文件,注意启用的顺序
  4. DOWNLOADER_MIDDLEWARES = {
        'scrapy_splash.SplashCookiesMiddleware': 723,
        'scrapy_splash.SplashMiddleware': 725,
        'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
    }


另外注意:

scrapy_splash.SplashMiddleware(725)的顺序是在默认的HttpProxyMiddleware(750)之前,要不然顺序的紊乱会造成功能的紊乱的

HttpCompressionMiddleware的优先级和顺序也应该适当的更改一下,这样才能更能处理请求  

查看:https://github.com/scrapy/scrapy/issues/1895 .里面提到的一些问题

  1. (3)在settings.py启用SplashDeduplicateArgsMiddleware中间件
  2. SPIDER_MIDDLEWARES = {
        'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
    }


  3. (4)我们来设置一个去重的类
  4. DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'


  5. (5)如果你使用scrapy http 缓存系统,那你就有必要启用这个scrapy-splash的缓存系统
  6. HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'


   如果你有在你自己的settings.py里面启用DEFAULT_REQUEST_HEADERS ,请务必注释掉,目前看来是一个bug ,我已经给scrapy splash 官方提了这个bug
          该bug 是由于default_request_headers 里面的host 与我要爬的sougou不匹配,这当然会出错,不得不说scrapy的官方维护人反应真的很迅速。大家添加的headers的时候注意这些细节内容。

代码

# -*- coding: utf-8 -*-
from scrapy import Request
from scrapy.spiders import Spider
from scrapy_splash import SplashRequest
from scrapy_splash import SplashMiddleware
from scrapy.http import Request, HtmlResponse
from scrapy.selector import Selector

class SplashSpider(Spider):
    name = 'scrapy_splash'
    # main address since it has the fun list of the products
    start_urls = [
        'https://item.jd.com/2600240.html'
    ]

    # allowed_domains = [
    #     'sogou.com'
    # ]

    # def __init__(self, *args, **kwargs):
    #      super(WeiXinSpider, self).__init__(*args, **kwargs)

  # request需要封装成SplashRequest
    def start_requests(self):
        # text/html; charset=utf-8
        for url in self.start_urls:
            yield SplashRequest(url
                                , self.parse
                                , args={'wait': '0.5'}
                                # ,endpoint='render.json'
                                )
        pass

    def parse(self, response):
        print "############"+response._url

        fo = open("html.txt", "wb")
        fo.write(response.body);  # 写入文件
        fo.close();
        #本文只抓取一个京东链接,此链接为京东商品页面,价格参数是ajax生成的。会把页面渲染后的html存在html.txt
        #如果想一直抓取可以使用CrawlSpider,或者把下面的注释去掉
        '''site = Selector(response)
        links = site.xpath('//a/@href')
        for link in links:
            linkstr=link.extract()
            print "*****"+linkstr
            yield SplashRequest(linkstr, callback=self.parse)'''



目录
相关文章
|
4月前
|
数据采集 存储 数据处理
Scrapy:Python网络爬虫框架的利器
在当今信息时代,网络数据已成为企业和个人获取信息的重要途径。而Python网络爬虫框架Scrapy则成为了网络爬虫工程师的必备工具。本文将介绍Scrapy的概念与实践,以及其在数据采集和处理过程中的应用。
26 1
|
5月前
|
数据采集 调度 Python
Scrapy爬虫中合理使用time.sleep和Request
Scrapy爬虫中合理使用time.sleep和Request
|
16天前
|
数据采集 存储 中间件
【专栏】随着技术发展,Scrapy将在网络爬虫领域持续发挥关键作用
【4月更文挑战第27天】Scrapy是Python的高效爬虫框架,以其异步处理、多线程和中间件机制提升爬取效率。它的灵活性体现在可定制化组件、支持多种数据库存储及与Selenium、BeautifulSoup等工具集成。Scrapy易于扩展,允许自定义下载器和解析器。在实践中,涉及项目配置、Spider类编写、数据抓取、存储与分析。面对动态网页和反爬机制,Scrapy可通过Selenium等工具应对,但需注意法规与道德规范。随着技术发展,Scrapy将在网络爬虫领域持续发挥关键作用。
|
22天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
22 0
|
2月前
|
数据采集 Web App开发 搜索推荐
项目配置之道:优化Scrapy参数提升爬虫效率
项目配置之道:优化Scrapy参数提升爬虫效率
|
3月前
|
数据采集 JavaScript 前端开发
深度剖析Selenium与Scrapy的黄金组合:实现动态网页爬虫
深度剖析Selenium与Scrapy的黄金组合:实现动态网页爬虫
|
3月前
|
数据采集 Web App开发 前端开发
Python爬虫之Ajax分析方法与结果提取#6
Ajax分析方法、Ajax结果提取【2月更文挑战第20天】
41 0
Python爬虫之Ajax分析方法与结果提取#6
|
3月前
|
数据采集 前端开发 JavaScript
Python爬虫之Ajax数据爬取基本原理#6
Ajax数据爬取原理【2月更文挑战第19天】
33 1
Python爬虫之Ajax数据爬取基本原理#6
|
8月前
|
数据采集 JSON 前端开发
Python爬虫进阶:使用Scrapy库进行数据提取和处理
在我们的初级教程中,我们介绍了如何使用Scrapy创建和运行一个简单的爬虫。在这篇文章中,我们将深入了解Scrapy的强大功能,学习如何使用Scrapy提取和处理数据。
|
4月前
|
数据采集 存储 调度
Scrapy:解锁网络爬虫新境界
在当今信息爆炸的时代,获取并处理大量网络数据是互联网行业中至关重要的一环。Python网络爬虫框架Scrapy作为一款高效、灵活的工具,为开发者提供了强大的能力来抓取、解析和存储各类网页信息。本文将介绍Scrapy的概念、主要特点以及实践经验,帮助读者掌握这一工具,并在实际项目中应用。