鱼C论坛

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

[作品展示] 基于scrapy框架爬取某某某网站,25000+番号图

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

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

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

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

mm.jpg

mm.jpg

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


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

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

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

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

  21.     def parse_detail(self, response):
  22.         img_name = response.xpath('//p/img/@alt').get()
  23.         img_list = response.xpath('//p/img/@src').getall()
  24.         img_path_list = [('{}/{}/{}_{}'.format(self.name, response.meta['name'], img_name, i+1),
  25.                           img_list[i]) for i in range(len(img_list))]
  26.         print('Downloading: {}'.format(img_name))
  27.         yield {'img_list': img_path_list}
复制代码


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


  3. class MmSpiderPipeline(object):
  4.     def process_item(self, item, spider):
  5.         return item


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

  10.     def file_path(self, request, response=None, info=None):
  11.         name = request.meta['image_name']
  12.         filename = '{}.jpg'.format(name)
  13.         return filename
复制代码

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



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

帖子已编辑。对于爬取到链接后有很多中处理方式,我选择继承ImagesPipeline类然后直接下载到本地。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-28 12:49:04 | 显示全部楼层
renmjchn@qq.com
求源码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-29 10:29:34 From FishC Mobile | 显示全部楼层
老铁,我是小白,能不能直接点,感谢啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-26 15:37:22 | 显示全部楼层
gkd,老司机带带我,最爱那些一言不合就变换着姿势的网站了
gerry0071@163.com
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 11:17:31 | 显示全部楼层
滴滴滴
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 18:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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