美文网首页
15.scrapy-redis多页抓取,使用redis一页一页的

15.scrapy-redis多页抓取,使用redis一页一页的

作者: starrymusic | 来源:发表于2019-04-01 16:53 被阅读0次

和前一篇类似,这里是修改后的csdn2.py文件,代码如下:

# -*- coding: utf-8 -*-
import scrapy
import example.items
from scrapy_redis.spiders import RedisSpider


class Csdn2Spider(RedisSpider):
    name = 'csdn2'
    redis_key = 'csdn2:start_urls'

    def __init__(self, *args, **kwargs):
        # Dynamically define the allowed domains list.
        domain = kwargs.pop('https://edu.csdn.net', '')
        self.allowed_domains = filter(None, domain.split(','))
        super(Csdn2Spider, self).__init__(*args, **kwargs)

    def parse(self, response):
        for pagedata in response.xpath("//dl[@class='lector_list']"):
            item = example.items.Csdn2Item()
            item['teacher'] = pagedata.xpath("./dd[1]/ul/li/a/text()").extract()
            item['lessons'] = pagedata.xpath("./dd[1]/ul/li[2]/span/text()").extract()
            item['student'] = pagedata.xpath("./dd[1]/ul/li[3]/span/text()").extract()
            item['describe'] = pagedata.xpath("./dd[1]/p/text()").extract()
            yield item

这里是修改后的items.py文件,代码如下:

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/topics/items.html

from scrapy.item import Item, Field
from scrapy.loader import ItemLoader
from scrapy.loader.processors import MapCompose, TakeFirst, Join

class Csdn2Item(Item):
    teacher = Field()
    lessons = Field()
    student = Field()
    describe = Field()
    crawled = Field()
    spider = Field()
   

class ExampleItem(Item):
    name = Field()
    description = Field()
    link = Field()
    crawled = Field()
    spider = Field()
    url = Field()


class ExampleLoader(ItemLoader):
    default_item_class = ExampleItem
    default_input_processor = MapCompose(lambda s: s.strip())
    default_output_processor = TakeFirst()
    description_out = Join()

其他文件无需更改,如果想看到输出结果,可以在pipelines.py文件里加一句打印的代码。打开redis-cli.exe,连接上redis服务器。
在cmd.exe里切换到项目所在位置,然后执行“scrapy crawl csdn2”,执行后会显示等待的状态,这时在redis-cli.exe里输入

lpush csdn2:start_urls https://edu.csdn.net/lecturer?&page=1

在cmd.exe里就会显示抓取的第一页的教师信息。
如果想让他继续执行,就在redis客户端里不断地输入要爬取的url地址即可。

相关文章

  • 15.scrapy-redis多页抓取,使用redis一页一页的

    和前一篇类似,这里是修改后的csdn2.py文件,代码如下: 这里是修改后的items.py文件,代码如下: 其他...

  • scrapy 抓取分页信息

    练习(三) 目标抓取 在练习二的基础上按照分页信息抓取每一页信息 首先我们抓取下一页的连接 接下来修改parse方...

  • vim基础

    vim基础,多练习,多使用 按键操作 普通模式 1移动光标部分ctrl+f 向下一页ctrl+b 向上一页0 ...

  • 29.selenium多页抓取,并保存到三大主流数据库

    在上一篇中使用scrapy-splash抓取了单页js加载的信息,只抓取一页对爬虫来说简直是高射炮打蚊子。本篇将抛...

  • 给自己(55)

    行走在路上 沿途的风景就像一本诗集 一页是春一页是夏 一页是秋一页是冬 一页是暖阳一页是风雪 一页是欢乐一页是痛苦...

  • 多一页!

  • 书香

    文|如烟似海 图|来自网络 指尖一页页地翻动着纸张,有一页轻盈,亦有一页沉重;有一页欢喜,亦有一页悲哀;有一页花香...

  • day7-分页、上传图片、session登录、csrf校检

    一、实现分页功能 1、使用切片实现分页 2、使用Paginator 当前页,页码,上一页,下一页设置 二、上传图片...

  • 一页一页又一页

    阅读是写作的前置程序,舍弃阅读独尊写作是错误的选择。没有好的阅读就没有好的写作,这是真理。妄想跨过阅读直达写作无异...

  • 一页一页又一页

    一册一册又一册

网友评论

      本文标题:15.scrapy-redis多页抓取,使用redis一页一页的

      本文链接:https://www.haomeiwen.com/subject/bynvbqtx.html