用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話)
笑對曇天 <外傳> ~訣別、豺的誓言~ (曇天に笑う<外伝>~決別、犲の誓い~)
刀劍亂舞-花丸- ~幕間回想錄~ (刀剣亂舞-花丸- ~幕間回想録~)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章