鱼C论坛

 找回密码
 立即注册
查看: 2654|回复: 6

[原创] 基于scrapy框架爬取某某某网站,25000+番号图

[复制链接]
发表于 2019-7-10 21:39:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 stonejianbu 于 2019-7-12 00:56 编辑

mm.jpg

mm.jpg

听说新鱼油都喜欢爬虫贴,特别是那种不断换动作的动作片,嘻...(一脸邪恶) 上图为su ren系列,年轻或清纯....(眼神迷离)直接上代码。
# -*- coding: utf-8 -*-
import scrapy


class Luxu8Spider(scrapy.Spider):
    name = 'luxu8'
    allowed_domains = ['www.259luxu8.com']
    start_urls = ['https://www.259luxu8.com/']

    def parse(self, response):
        list_link = response.xpath('//ul[@id="menu-259luxu"]/li')[1:]
        link_href_list = [(link.xpath('./a/@href').get(), link.xpath('./a/text()').get()) for link in list_link]
        for link, name in link_href_list:
            yield response.follow(link, callback=self.parse_list, meta={'name': name})

    def parse_list(self, response):
        article_list = response.xpath('//div[@id="post_list_box"]/article')
        article_href_list = [article.xpath('./header[@class="entry-header"]/h2/a/@href').get() for article in article_list]
        for link in article_href_list:
            yield response.follow(link, callback=self.parse_detail, meta={'name': response.meta['name']})

        # 获取下一页地址
        next_url = response.xpath('//a[@title="下页"]/@href').get()
        if next_url:
            yield response.follow(next_url, callback=self.parse_list, meta={'name': response.meta['name']})

    def parse_detail(self, response):
        img_name = response.xpath('//p/img/@alt').get()
        img_list = response.xpath('//p/img/@src').getall()
        img_path_list = [('{}/{}/{}_{}'.format(self.name, response.meta['name'], img_name, i+1),
                          img_list[i]) for i in range(len(img_list))]
        print('Downloading: {}'.format(img_name))
        yield {'img_list': img_path_list}

        以上代码基于scrapy框架,看起来较为简单清晰,其思路大概为:首先获取网站首页取分类页的链接,然后爬取分类的列表页,接着进入详情页获取番号图,不断地提取<下一页>以爬取整个网站
import scrapy
from scrapy.pipelines.images import ImagesPipeline


class MmSpiderPipeline(object):
    def process_item(self, item, spider):
        return item


class MyImagePipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        for name, image_url in item['img_list']:
            yield scrapy.Request(image_url, meta={'image_name': name})

    def file_path(self, request, response=None, info=None):
        name = request.meta['image_name']
        filename = '{}.jpg'.format(name)
        return filename
        对于爬取到的番号链接列表,可使用继承scrapy内置类ImagesPipeline以达到下载并修改将图片名命名为相应的番号的目的,使用其还需要设置下IMAGES_STORE='./mm',这里指的是图片下载到目录mm下。
        以上网站有2500+番号图。标题25000+?哈,今天爬了三个网站,保存了25000+的番号图,但是由于首次发帖,不知道这样是否违规,但为了鱼油们的性福我还是铤而走险。各位鱼油可以自己把代码跑一遍,什么样mm都有(嘿~注意身体)。如果有鱼油对我另外的两个网站资源代码也感兴趣,可以联系下我邮箱,或者评论写邮箱地址,后面可考虑写个程序自动给你们发源码。如果有鱼油不重过程只重结果,只对25000+的番号图图有不轨,可私信我下,有空的话可以给你们发,太多人就不发了,所以还是建议你们自己跑程序,程序应该不会有什么问题,当然有问题可以评论下,鱼油互相帮助回答下!
mm_spider.zip (13.5 KB, 下载次数: 21, 售价: 1 鱼币)



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-11 19:43:05 | 显示全部楼层
然后呢??爬取下一步保存在哪了?请指教:hdcomb@163.com
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-12 00:49:05 | 显示全部楼层
hdcomb 发表于 2019-7-11 19:43
然后呢??爬取下一步保存在哪了?请指教:

帖子已编辑。对于爬取到链接后有很多中处理方式,我选择继承ImagesPipeline类然后直接下载到本地。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-28 12:49:04 | 显示全部楼层
renmjchn@qq.com
求源码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-29 10:29:34 From FishC Mobile | 显示全部楼层
老铁,我是小白,能不能直接点,感谢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-26 15:37:22 | 显示全部楼层
gkd,老司机带带我,最爱那些一言不合就变换着姿势的网站了
gerry0071@163.com
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 11:17:31 | 显示全部楼层
滴滴滴
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 13:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表