Scrapy爬取jav图书馆人气女演员作品链接

来源:互联网 发布:mac键盘坏了怎么办 编辑:程序博客网 时间:2024/06/08 10:52

  jav图书馆是个多么神奇的地方这里不用多说,大家经常在此提升自己的姿势水平…而这个网站是不提供资源链接下载的,在使用的过程中,常常会有这样的感觉:疲于查看喜欢的演员作品更新,并去其他网站收集神秘代码。这样的工作重复且无聊,很费时间和精力,如果有一个东西能将现在top20的人气女演员的所有作品的资源链接一键下载到本地,那该多好啊!而这,并不是梦。
  使用scrapy爬虫框架可以轻松做到这样的事情。这个爬虫,由top20页面始,分别进入各个演员的作品列表页面搜集神秘代码,以及相应的标题和出版时间信息,结合torrentkitty网站,通过构造该资源网站搜索时根据神秘代码产生的相应url,进入页面之后,便可得到资源链接,将它们按目录保存在本地的txt文件当中即可。
  创建一个javlink的project。

scrapy startproject javlink

  items.py没什么好说的。

import scrapyclass JavlinkItem(scrapy.Item):    actress = scrapy.Field()    artwork = scrapy.Field()    bango = scrapy.Field()    title = scrapy.Field()    link = scrapy.Field()    posttime = scrapy.Field()

  pipelines.py写了两个,第一个是保存到json格式中,但每个演员之间是分开的,不实用。后来又依照前两个爬虫设置目录的思路,将资源链接保存到了txt文件中。

import codecsimport jsonimport osclass JavlinkPipeline1(object):    def __init__(self):        self.file = codecs.open('javtest.json', 'wb', encoding='utf-8')    def process_item(self, item, spider):        line = json.dumps(dict(item)) + '\n'        self.file.write(line.decode("unicode_escape"))        return itemclass JavlinkPipeline2(object):    def process_item(self, item, spider):        filedir = r'full/{0[actress]}/{0[posttime]}/{0[bango]}/{0[title]}'.format(item)        if os.path.exists(filedir) :            if item['link'] == 'none':                pass            else:                with codecs.open(filedir+'/link.txt', 'wb') as f:                    f.write(item['link'])        else:            os.makedirs(filedir)            if item['link'] =='none':                pass            else:                with codecs.open(filedir+'/link.txt', 'wb') as f:                    f.write(item['link'])        return item

  settings.py中一定要将ROBOTSTXT_OBEY = True这一行注释掉,如果创建爬虫项目后它自动出现的话,否则会爬取失败。

BOT_NAME = 'javlink'SPIDER_MODULES = ['javlink.spiders']NEWSPIDER_MODULE = 'javlink.spiders'#ROBOTSTXT_OBEY = TrueITEM_PIPELINES = {'javlink.pipelines.JavlinkPipeline2': 1}USER_AGENT='Mozilla/5.0 (Windows NT 5.2) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30'

  最重要的爬虫文件依据前面所述思路,分为几层parse函数,一层一层最终得到想要的数据,细节这里不再去说,全在代码里。

# -*- coding: utf-8 -*-__author__ = 'fybhp'import  scrapyfrom scrapy.selector import Selectorfrom javlink.items import JavlinkItemclass JavSpider(scrapy.Spider):    name = "javart"    allowed_domains = ["ja7lib.com",                       "torrentkitty.tv"]    start_urls = ["http://www.ja7lib.com/cn/star_mostfav.php"]    def parse(self, response):        sel = Selector(response)        road = sel.xpath('//div[@class="starbox"]/div')        for yige in road:            item = JavlinkItem()            item['actress'] = yige.xpath('.//img/@title').extract()[0].encode('utf-8')#.encode('gbk','ignore')            halfurl = yige.xpath('./a/@href').extract()[0]            url = response.urljoin(halfurl)            request = scrapy.Request(url, meta={'item':item}, callback=self.parse_page)            yield request    def parse_page(self,response):        sel = Selector(response)        pagenum = 1        try:            pageroad = sel.xpath('.//div[@class="page_selector"]/a[last()]/@href').extract()[0]            pagenum = int(pageroad.split('=')[-1])        except:            pass        if pagenum == 1:            item = response.meta['item']            url = response.url+'&page=1'            request = scrapy.Request(url, meta={'item':item}, callback=self.parse_bike)            yield request        else:            for i in range(pagenum):                item = response.meta['item']                urlroad = sel.xpath('.//div[@class="page_selector"]/a[last()]/@href').extract()[0]                s = response.urljoin(urlroad)                s = s.split('=')                s[-1] = str(i+1)                url = '='.join(s)                request = scrapy.Request(url, meta = {'item':item},callback=self.parse_bike)                yield request    def parse_bike(self,response):        sel = Selector(response)        road = sel.xpath('//div[@class="videos"]/div')        for yige in road:            item = response.meta['item']            halfurl = yige.xpath('./a/@href').extract()[0]            url = 'http://www.ja7lib.com/cn'+halfurl[1:]            request = scrapy.Request(url, meta={'item':item},callback=self.parse_link)            yield request    def parse_link(self,response):        sel = Selector(response)        item = response.meta['item']        item2 = JavlinkItem()        bango = sel.xpath('//div[@id="video_id"]//td[@class="text"]/text()').extract()[0]        title = sel.xpath('//h3[@class="post-title text"]/a/text()').extract()[0].encode('utf-8')#.encode('gbk','ignore')        posttime = sel.xpath('//div[@id="video_date"]//td[@class="text"]/text()').extract()[0]        item2['bango'] = bango        item2['posttime'] = posttime        item2['title'] = title        item2['actress'] = item['actress']        url = 'http://www.torrentkitty.tv/search/'+bango+'/'        request = scrapy.Request(url,meta={'item':item2},callback=self.parse_last)        yield request    def parse_last(self,response):        sel = Selector(response)        item = response.meta['item']        try:            item['link'] = sel.xpath('//a[@rel="magnet"]/@href').extract()[0]        except:            item['link'] = 'none'        yield item

  由于内容特殊,这里就不上效果图了,毕竟我们主要是为了探讨技术,各位老司机可以去自己试试哦,再也不用去到处求资源了,一键将图书馆搬到本地,随意欣赏。
  关于爬虫的文章写到这里也算告一段落了,觉得还挺好玩儿的,自己想爬的东西都已爬取到,若以后再有想法,会再来更新。

0 0
原创粉丝点击