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
由于内容特殊,这里就不上效果图了,毕竟我们主要是为了探讨技术,各位老司机可以去自己试试哦,再也不用去到处求资源了,一键将图书馆搬到本地,随意欣赏。
关于爬虫的文章写到这里也算告一段落了,觉得还挺好玩儿的,自己想爬的东西都已爬取到,若以后再有想法,会再来更新。
- Scrapy爬取jav图书馆人气女演员作品链接
- scrapy爬取链接
- 使用Scrapy爬取电影链接
- Python+scrapy+mysql实现爬取磁力链接
- scrapy爬取网易云音乐的MP3链接
- scrapy实战-爬取
- Scrapy爬取图片
- scrapy爬取图片
- Scrapy爬取1
- scrapy 爬取漫画
- scrapy爬取图片
- Python3[爬虫实战] scrapy爬取汽车之家全站链接存json文件
- scrapy爬取深度设置
- Scrapy爬取亚马逊商品信息
- scrapy爬取博客文章
- Scrapy爬取博客内容
- scrapy实现分页爬取
- Scrapy之图片爬取。
- BAPI_CUSTOMERRETURN_CREATE 创建退货订单
- 屏幕适配
- MySQL如何将select子查询结果横向拼接后插入数据表中
- 程序猿拍婚纱照的真实记录
- JSP的Tomcat配置
- Scrapy爬取jav图书馆人气女演员作品链接
- Ubuntu安装后,要做这些事
- 2016春季练习——水题
- Java-密码加密
- 图片磁盘缓存量的大小显示和,清除缓存实现 ------ 基于glide
- C# 连接SQL数据库类
- 异步请求
- 嵌入式学习-uboot-lesson9.1-C语言环境初始化
- LeetCode - 371. Sum of Two Integers