scrapy_redis中以set存入url和附带内容-写给自己

2017-11-10  本文已影响0人  wfishj

前言

需求:初始化url除了url外还有其他字段信息需要附带上,以便item输出时继承这些信息
思路:改写scrapy_redis中的next_request类,和改写将url存入redis的脚本。将需要附带的信息和url在next_request处理中进行分离,将附带的信息放入meta中从而实现继承信息。

spider中的 next_requests

scrapy_redis通过next_requests来制造requests,因此对其读取redis部分进行改造,另外使用Request来构造请求。读取出来的内容用json来转化。

from scrapy.http import Request
from scrapy.http import FormRequest
from scrapy_redis.spiders import RedisSpider
from scrapy_redis import connection
from scrapy import signals

class House_detail_spider(RedisSpider):
    
    name = 'ningbohdetailsd'

    allowed_domains = ['http://newhouse.cnnbfdc.com/']

    redis_key ='ningbohdetailsd:start_urls'

    a = redis.Redis("127.0.0.1","6379")  #redis地址,因为读取默认地址出现错误,所以在spider中链接好
    
    def next_requests(self):

        found = 0

        while found < self.redis_batch_size:
            data_raw =self.a.spop(self.redis_key) #从redis中取出内容

            if not data_raw:
                break
          
            data = json.loads(data_raw)    #存入redis的内容是json,需要转化
            
            if "source_url" not in data:
                break
            req = Request(url=data['source_url'],
                            method='GET',
                            dont_filter=True,
                            meta=data['meta'])  #发出请求
            if req:
                yield req
                found += 1
            else:
                self.logger.debug("Request not made from data: %s", data)

        if found:
            self.logger.debug("Read %s requests from '%s'", found, self.redis_key)
将种子url传入redis的脚本

使用添加集合的方式来存入url和对应信息

    a = redis.Redis("127.0.0.1","6379")
    ddd={
            "source_url":"url"
            "meta":
                    {
                    "building_name":'12345',
                    "project_name" :'12345',
                    "project_uuid" :'12345',
                    }
            }
            
    ddd2 =json.dumps(ddd)      #将字典转化为json
    
    a.sadd('ningbohdetailsd:start_urls',ddd2)   #存入内容
上一篇下一篇

猜你喜欢

热点阅读