scrapy-redis 和 scrapy-splash结合 做分布式渲染爬取

本人在scrapy-redis项目中的setting.py中配置,可时中有问题。但是可以使用以下方法:

首先,你要确保安装了splash,并且已经启动

(1)先安装scrapy-splash库:

[python] view
plain
 copy

  1. pip install scrapy-splash  

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

[python] view
plain
 copy

 

  1. docker run -p 8050:8050 scrapinghub/splash
     

在原有scrapy-redis项目基础上,只需要在spider中重写生成request的方法即可。主要原理时是把url转发给splash,让splash解析后返回

(1)普通爬虫中,

注意:如果是scrapy,并且没有使用scrapy-redis可以使用配置的方法,参见 http://blog.csdn.net/u013378306/article/details/54409215

 

# -*- coding: utf-8 -*-
from scrapy import Request
from scrapy.spiders import Spider
from scrapy.http import Request, HtmlResponse
from scrapy.selector import Selector
import json
class WeiXinSpider(Spider):
    name = 'test'
    start_urls = [
        'https://item.jd.com/2600240.html'
    ]
    global splashurl;
    splashurl = "http://localhost:8050/render.html";# splash 服务器地址

    #此处是重父类方法,并使把url传给splash解析
    def make_requests_from_url(self, url):
        global splashurl;
        url=splashurl+"?url="+url;
        body = json.dumps({"url": url, "wait": 5, 'images': 0, 'allowed_content_types': 'text/html; charset=utf-8'})
        headers = {'Content-Type': 'application/json'}
        return Request(url, body=body,headers=headers,dont_filter=True)

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

        fo = open("jdeeeeeeeeee.html", "wb")
        fo.write(response.body);  # 写入文件
        fo.close();
        '''site = Selector(response)
        links = site.xpath('//a/@href')
        for link in links:
            linkstr=link.extract()
            print "*****"+linkstr
            yield SplashRequest(linkstr, callback=self.parse)'''

(2)scrapy-redis中,和上面相同

   

#encoding: utf-8
from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor
from scrapy_redis.spiders import RedisCrawlSpider
import json
from scrapy.http import Request, HtmlResponse
class MyCrawler(RedisCrawlSpider):
    """Spider that reads urls from redis queue (myspider:start_urls)."""
    name = 'mycrawler_redis'
    redis_key = 'mycrawler:start_urls'
    #start_urls = ['https://zhidao.baidu.com/question/2205192714330042628.html?fr=iks&word=scrapy&ie=gbk']
    rules = (
        # follow all links
        Rule(LinkExtractor(allow=('/question/.*'),
                               restrict_xpaths=('//a[@class="related-link"]')), callback='parse_page', follow=True),
    )
    global splashurl;
    splashurl = "http://localhost:8050/render.html";
    # splash 服务器地址
    #此处是重父类方法,并使把url传给splash解析
    def make_requests_from_url(self, url):
        global splashurl;
        url = splashurl + "?url=" + url;
        body = json.dumps({"url": url, "wait": 5, 'images': 0, 'allowed_content_types': 'text/html; charset=utf-8'})
        headers = {'Content-Type': 'application/json'}
        return Request(url, body=body, headers=headers, dont_filter=True)

    def __init__(self, *args, **kwargs):
        # Dynamically define the allowed domains list.
        domain = kwargs.pop('domain', '')
        self.allowed_domains = filter(None, domain.split(','))
        super(MyCrawler, self).__init__(*args, **kwargs)

    def parse_page(self, response):
        print "#####"+response._url
        return {
            'name': response.css('title::text').extract_first(),
            'url': response.url,
        }
时间: 2024-11-10 00:19:52

scrapy-redis 和 scrapy-splash结合 做分布式渲染爬取的相关文章

你懂Scrapy吗?Scrapy大型爬虫框架讲解【一】

这是Scrapy爬虫框架的第一篇,本系列专题将包含以下内容: 介绍Scrapy框架的主体以及各个组件的意义; 举实例讲解其具体应用. 开始第一节: 介绍Scrapy框架的主体以及各个组件的意义. Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services

使用Scrapy爬取知乎网站

本文主要记录使用使用 Scrapy 登录并爬取知乎网站的思路.Scrapy的相关介绍请参考 使用Scrapy抓取数据. 相关代码,见 https://github.com/javachen/scrapy-zhihu-github ,在阅读这部分代码之前,请先了解 Scrapy 的一些基本用法. 使用cookie模拟登陆 关于 cookie 的介绍和如何使用 python 实现模拟登陆,请参考python爬虫实践之模拟登录. 从这篇文章你可以学习到如何获取一个网站的 cookie 信息.下面所讲述

Python使用Scrapy爬取妹子图

前面我们给大家介绍了使用nodejs来爬取妹纸图片的方法,下面我们来看下使用Python是如何实现的呢,有需要的小伙伴参考下吧. Python Scrapy爬虫,听说妹子图挺火,我整站爬取了,上周一共搞了大概8000多张图片.和大家分享一下. 核心爬虫代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 # -*- coding: utf-8

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

来源:http://www.cnblogs.com/wanghzh/p/5824181.html 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感.   Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地

scrapy 爬取百度知道,多spider子一个项目中,使用一个pielines

爬取过程中 遇见 百度蜘蛛反爬 robot.txt,我们可以在scrapy 的setting.py 配置文件下配置 ROBOTSTXT_OBEY = False 最终代码 # -*- coding: utf-8 -*- from scrapy.spider import Spider from scrapy.contrib.spiders import CrawlSpider, Rule #from scrapy.contrib.linkextractors.sgml import SgmlLi

Scrapy ——自动多网页爬取(抓取某人博客所有文章)(四)

首先创建project: [python] view plain copy   scrapy startproject CSDNBlog   一. items.py编写 在这里为清晰说明,只提取文章名称和文章网址. [python] view plain copy   # -*- coding:utf-8 -*-      from scrapy.item import Item, Field      class CsdnblogItem(Item):       """存

scrapy自动多网页爬取CrawlSpider类(五)

一.目的. 自动多网页爬取,这里引出CrawlSpider类,使用更简单方式实现自动爬取. 二.热身. 1.CrawlSpider (1)概念与作用: 它是Spider的派生类,首先在说下Spider,它是所有爬虫的基类,对于它的设计原则是只爬取start_url列表中的网页,而从爬取的网页中获取link并继续爬取的工作CrawlSpider类更适合. (2)使用: 它与Spider类的最大不同是多了一个rules参数,其作用是定义提取动作.在rules中包含一个或多个Rule对象,Rule类与

scrapy爬虫自动爬取的实例

Spider爬取过程 以初始的URL初始化Request,并设置回调函数.当该request下载完毕并返回时,将生成response,并作为参数传递给该回调函数. spider中初始的request是通过调用start_requests()来获取的.start_request()读取start_urls中的URL,并以parse为回调函数生成Request. 在回调函数内分析返回的(网页)内容,返回 Item 对象或者 Request 或者一个包括二者的可迭代容器.返回的Request对象之后会

使用python scrapy框架写爬虫如何爬取搜狐新闻的参与人数?

问题描述 使用python scrapy框架写爬虫如何爬取搜狐新闻的参与人数? URL如下:http://quan.sohu.com/pinglun/cyqemw6s1/442631551 参与人数该如何爬取,找不到切入点,新手一头雾水-- 非常感谢!! 解决方案 这个是可能异步ajax返回的,所以需要用selenium等webdriver来处理 解决方案二: http://www.shenjianshou.cn/