用Scrapy爬动画列表

数据来源:

爬动漫花园的话要设置ROBOTSTXT_OBEY = False

items.py

import scrapy


class AnimeItem(scrapy.Item):
    name = scrapy.Field()
    sub_name = scrapy.Field()

bangumi_spider.py

import scrapy
from Bangumi.items import *


class BangumiSpider(scrapy.Spider):
    name = 'BangumiAll'
    allowed_domains = ['bangumi.tv']
    start_urls = [
        'http://bangumi.tv/anime/browser/tv/airtime/2017?sort=date',
        'http://bangumi.tv/anime/browser/ova/airtime/2017?sort=date',
        'http://bangumi.tv/anime/browser/movie/airtime/2017?sort=date'
    ]

    def parse(self, response):
        for li in response.xpath('//ul[@id="browserItemList"]/li/div/h3'):
            item = AnimeItem()
            item['name'] = li.xpath('a/text()').extract_first()
            item['sub_name'] = li.xpath('small/text()').extract_first()
            yield item

        next_page = response.xpath('//div[@class="page_inner"]/a[text()="››"]/@href')
        if next_page:
            url = response.urljoin(next_page.extract_first())
            yield scrapy.Request(url, self.parse)


class TVSpider(BangumiSpider):
    name = 'BangumiTV'
    start_urls = [
        'http://bangumi.tv/anime/browser/tv/airtime/2017?sort=date'
    ]

class OVASpider(BangumiSpider):
    name = 'BangumiOVA'
    start_urls = [
        'http://bangumi.tv/anime/browser/tv/airtime/2017?sort=date'
    ]

class MovieSpider(BangumiSpider):
    name = 'BangumiMovie'
    start_urls = [
        'http://bangumi.tv/anime/browser/movie/airtime/2017?sort=date'
    ]

dmhy_spider.py

import scrapy
import json
from Bangumi.items import *


class DMHYSpider(scrapy.Spider):
    name = 'DMHY'
    allowed_domains = ['share.dmhy.org']
    start_urls = [
        'https://share.dmhy.org/json/2017Q1.json',
        'https://share.dmhy.org/json/2017Q2.json'
    ]

    def parse(self, response):
        data = json.loads(response.body)
        for animes in data.values():
            for anime in animes:
                item = AnimeItem()
                item['name'] = anime['name']
                item['sub_name'] = None
                yield item

pipelines.py

import codecs


class BangumiPipeline(object):
    def open_spider(self, spider):
        self.file = codecs.open(spider.name + '.txt', 'w', 'utf-8')

    def close_spider(self, spider):
        self.file.close()

    def process_item(self, item, spider):
        line = item['name']
        if item['sub_name']:
            line += ' (' + item['sub_name'] + ')'
        line += '\r\n'
        self.file.write(line)
        return item

部分结果:

我们的爱总是只有10厘米。 (いつだって僕らの恋は10センチだった。)
3月的狮子 第二季 (3月のライオン 第2シリーズ)
机甲大师 (ROBOMASTERS THE ANIMATED SERIES)
犬舍 (いぬやしき)
关于我女友是个一本正经的处女碧池这件事 (僕の彼女がマジメ過ぎるしょびっちな件)
Wake Up, Girls! 新章
网路胜利组 (ネト充のススメ)
鲸鱼之子们在沙丘上歌唱 (クジラの子らは砂上に歌う)
干物妹!小埋R (干物妹! うまるちゃんR)
如果有妹妹就好了。 (妹さえいればいい。)
动画同好会 (アニメガタリズ)
卡片战斗先导者 GZ (カードファイト!! ヴァンガードG Z)
Code:Realize ~创世的姬君~ (Code:Realize ~創世の姫君~)
血界战线 & BEYOND (血界戦線 & BEYOND)
调教咖啡厅 (ブレンド・S)
偶像大师SideM (アイドルマスター SideM)
Love Live! Sunshine!! 第二季 (ラブライブ! サンシャイン!!2期)
魔法使的新娘 (魔法使いの嫁)
鬼灯的冷彻 第二季 (鬼灯の冷徹 第弐期)
时间飞船 逆袭的三恶人 (タイムボカン 逆襲の三悪人)
克拉斯卡劳埃德 第二季 (クラシカロイド 第2シリーズ)
宝石之国 (宝石の国)
侧车搭档 (つうかあ)
Pingu in the City
反转星球
妖怪手表 暗影面 鬼王的复活 (映画 妖怪ウォッチ シャドウサイド 鬼王の復活)
公牛历险记 (Ferdinand)
少女与战车 最终章 第1话 (ガールズ&パンツァー 最終章 第1話)
笑对昙天 <外传> ~诀别、豺的誓言~ (曇天に笑う<外伝>~決別、犲の誓い~)
刀剑乱舞-花丸- ~幕間回想录~ (刀剣乱舞-花丸- ~幕間回想録~)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值