吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13769|回复: 49
上一主题 下一主题
收起左侧

[Python 转载] 爬取套图网站某个美女的所有写真

  [复制链接]
跳转到指定楼层
楼主
mayixb 发表于 2021-3-5 21:01 回帖奖励
本帖最后由 mayixb 于 2021-3-6 11:14 编辑




前面把创建工程的步骤给忘记了

  1. 创建工程 scrapy strartproject cra
  2. 进入工程目录 cd cra
  3. 创建爬虫 scrapy genspider -t crawl spidername www.xxx.xxx

在spider文件是把这段注释掉 # allowed_domains = ['www.xxx.com']


最后是运行爬虫 要在工程目录里面

cra>scrapy crawl spidername


看到某吧有人上传了些写真,前面刚刚看了 scrapy的CrawlSpider 就想网站此model的所有写真套图爬下来

CrawlSpider提取连接太方便了

spider文件

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from mid.items import XiurenjiItem

class SpidernameSpider(CrawlSpider):
    name = 'spidername'
    # allowed_domains = ['www.xxx.com']
    #搜索页的一个连接
    start_urls = ['https://www.xiurenji.cc/plus/search/index.asp?keyword=egg&searchtype=title&p=4']
    #链接提取器,拿到所有的搜索分页的连接
    link = LinkExtractor(allow='title&p=\d+')
    rules = (
        Rule(link, callback='parse_item', follow=True),
    )

    #自定义这个爬虫的图片下载的本地存储位置
    custom_settings = {
        'IMAGES_STORE': r'W:\HDTV\写真\女神egg'
    }

    #解析每个分页的url
    def parse_item(self, response):
        #分页页面内的套图a标签
        title_tag=response.xpath('//div[@class="list"]//div[@class="title1"]/a')
        #循环a标签可以拿到套图的title和url
        for title in title_tag:
            t=''.join(title.xpath('.//text()').extract())
            u=f'https://www.xiurenji.cc/{title.xpath("./@href").extract_first()}'
            #手动发请求,回调套图的解析,要传个参数,把当前套图的title传过去
            yield scrapy.Request(url=u,callback=self.parse_page,meta={'title':t})

    #套图的解析
    def parse_page(self, response):
        #拿到套图的title
        title=response.meta['title']
        #套图里面也有分页,每个分页里面有几张写真,拿到分页里面的写真
        p=response.xpath('//div[@class="img"]/p/img')
        #循环页面内的写真图片,拿到每一个写真图片的url
        for img in p:
            #url要拼接一下
            img_url='https://www.xiurenji.cc'+img.xpath('./@src').extract_first()
            #实例化item,这个是要传到管道的
            item=XiurenjiItem()
            item['url']=img_url
            #图片按title分类,scrapy会自动根据路径建文件夹
            item['path']=title+'\\'+img_url.split('/')[-1]
            #把item传到管道
            yield item
        #拿到下一页的url
        next_url=response.xpath('//div[@class="page"]/a[text()="后"]/@href').extract_first()
        #如果存在就回调页面解析
        if next_url:
            next_url=f'https://www.xiurenji.cc{next_url}'
            #这里要把title传过去
            yield scrapy.Request(url=next_url,callback=self.parse_page,dont_filter=True,meta={'title':title})

pipelines文件

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
import scrapy, os,time

#通过管道下载图片视频等需要导入的模块
from scrapy.pipelines.images import ImagesPipeline

class ImgDownPipeline(ImagesPipeline):
    #通过管道类下载图片解析url的方法
    def get_media_requests(self, item, info):

        #meta自定义传参,传给保存图片的方法
        yield scrapy.Request(url=item['url'], meta={'item': item})
    #保存图片的方法
    def file_path(self, request, response=None, info=None):
        #拿到item中的文件名或者是路径文件名
        img_path = request.meta['item']['path']

        # 只需返回要给文件名就可以自动保存(文件名前有文件夹自动创建)
        return img_path
    #向下一个管道传item
    def item_completed(self, results, item, info):
        return item

class OpenDocPipeline(object):
    #spider就是爬虫主py,可以直接调用爬虫的类属性
    def open_spider(self, spider):
        print('爬虫开始'.center(50, '='))

    # 管道中处理item的方法
    def process_item(self, item, spider):
        return item  # 向下个管道传item

    def close_spider(self, spider):
        from scrapy.utils.project import get_project_settings

        print(f'共用时{time.perf_counter()}秒!')

        print('爬虫结束'.center(50, '='))

middlewares文件

import random

#自定义了个ua伪装的中间件

class UseragentrandomDownloaderMiddleware(object):
    USER_AGENTS = [
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
        'Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2919.83 Safari/537.36',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2866.71 Safari/537.36',
        'Mozilla/5.0 (X11; Ubuntu; Linux i686 on x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2820.59 Safari/537.36'
    ]

    def process_request(self, request, spider):

        user_agent = random.choice(self.USER_AGENTS)
        request.headers['User-Agent'] = user_agent

settings文件,该打开的就打开

#反爬要关闭
ROBOTSTXT_OBEY = False
LOG_LEVEL = 'ERROR'

IMAGES_STORE=r'W:\HDTV\写真\女神egg'

#这个重定向要打开,不然图片下载不下来
MEDIA_ALLOW_REDIRECTS = True

DOWNLOADER_MIDDLEWARES = {
   'mid.middlewares.UseragentrandomDownloaderMiddleware': 543,
}

ITEM_PIPELINES = {
   'mid.pipelines.ImgDownPipeline': 300,
   'mid.pipelines.OpenDocPipeline': 500
}

items文件

import scrapy

class XiurenjiItem(scrapy.Item):
    url=scrapy.Field()
    path=scrapy.Field()

免费评分

参与人数 7吾爱币 +7 热心值 +7 收起 理由
guanmodalao2234 + 1 + 1 我很赞同!
冷酷到底 + 1 + 1 谢谢@Thanks!
hshcompass + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
jieshao1 + 1 + 1 我只是来看看代码
crosskys + 1 + 1 出成品,出成品!
bailandi + 1 + 1 打包了的图压缩包分享下撒
13066627762 + 1 + 1 告诉我这就是你学习[Python] 的动力?

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
xie2006 发表于 2021-3-5 21:37
不会吧不会吧,不会真的有人看图吧,我是看技术点进来的
推荐
bailandi 发表于 2021-3-5 22:12
推荐
zhangnene 发表于 2021-3-5 21:28
4#
逗帆云视 发表于 2021-3-5 21:44
我就知道这种帖子会火·学习了
5#
yixiqiao 发表于 2021-3-5 22:00
不会吧 我是来找对象的
7#
snipers123 发表于 2021-3-5 22:18
出成品,老乡
8#
sueric 发表于 2021-3-5 22:30
学习学习
9#
阿姨洗铁路86 发表于 2021-3-5 22:30
直接要图是不是有点过分?
10#
FIzz001 发表于 2021-3-5 22:41
把链接拿了就跑
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 05:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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