zoukankan      html  css  js  c++  java
  • python-scrapy-增量式

    movie.py

    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    from zlsPro.items import ZlsproItem
    from redis import Redis


    class MovieSpider(CrawlSpider):
    name = 'movie'
    start_urls = ['https://www.4567kan.com/index.php/vod/show/id/1.html']

    rules = (
    Rule(LinkExtractor(allow=r'/index.php/vod/show/id/1/page/d+.html'), callback='parse_item', follow=True),
    )

    coon = Redis(host='127.0.0.1',port=6379)

    def parse_item(self, response):
    li_list = response.xpath('//div[1]/div/div/div/div[2]/ul/li')
    for li in li_list:
    title = li.xpath('./div/div/h4/a/text()')[0].extract()
    href = 'https://www.4567kan.com' + li.xpath('./div/div/h4/a/@href')[0].extract()
    item = ZlsproItem()
    item['title'] = title
    item['href'] = href
    ex = self.coon.sadd('movie_url',href)
    if ex == 1:
    print('有新增')
    yield scrapy.Request(url=href,callback=self.parse_href,meta={'item': item})
    else:
    print('暂无新增')


    def parse_href(self,response):
    detail = response.xpath('/html/body/div[1]/div/div/div/div[2]/p[5]/span[2]/text()').extract_first()
    item = response.meta['item']
    item['detail'] = detail
    yield item

    settings.py

    USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
    ROBOTSTXT_OBEY = False
    LOG_LEVEL = 'ERROR'
    # 使用scrapy-redis组件的去重队列
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    # 使用scrapy-redis组件自己的调度器
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    # 是否允许暂停
    SCHEDULER_PERSIST = True

    # 指定管道
    ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 400
    }

    # 指定数据库
    REDIS_HOST = '127.0.0.1'
    REDIS_PORT = 6379

    items.py

    import scrapy

    class ZlsproItem(scrapy.Item):
    # define the fields for your item here like:
    title = scrapy.Field()
    href = scrapy.Field()
    detail = scrapy.Field()

    运行项目 scrapy crawl movie
  • 相关阅读:
    plt.annotate() 在图中标注文字
    numpy 的 ravel() 和 flatten() 扁平化函数
    springboot 国际化
    springboot 日志
    springboot render 和 重定向
    将jar包 引入到maven
    requests 上传图片加额外参数
    java 占位符
    springboot JSR303 后端数据校验
    Python入门学习笔记10:函数式编程:匿名函数、高阶函数、装饰器
  • 原文地址:https://www.cnblogs.com/shiyi525/p/14286167.html
Copyright © 2011-2022 走看看