数据来源:
爬动漫花园的话要设置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話)
笑对昙天 <外传> ~诀别、豺的誓言~ (曇天に笑う<外伝>~決別、犲の誓い~)
刀剑乱舞-花丸- ~幕間回想录~ (刀剣乱舞-花丸- ~幕間回想録~)