吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3039|回复: 11
收起左侧

[Python 转载] 新手用scrapy框架爬取小姐姐图片

[复制链接]
热心市民小丑 发表于 2020-5-12 13:20

BeautifulPic.py

#coding=utf-8
'''
author 小丑
'''

from scrapy import Request
from scrapy.spiders import Spider
from ..items import BeautifulItem
import re

class DoubanProject(Spider):
    name='pics'
    def start_requests(self):
        urls = ["https://www.meitulu.com/t/nvshen/{}.html".format(str(i))for i in range(2,3)] #爬取页数控制
        for url in urls:
            yield Request(url) #循环访问爬取页数

    def parse(self, response):  #解析数据
        item=BeautifulItem()
        info_url=response.xpath("//ul[@class='img']/li/a/@href").extract()  #解析出当前页中每个小姐姐的url地址
        u = re.findall("item/(.*?).html", str(info_url))   #解析出url中的代号

        for i in range(60):       #一页中url个数(小姐姐个数)
            infor_url = "https://www.meitulu.com/item/" + u[i] + ".html"
            print(info_url)
            yield Request(infor_url,callback=self.parse_detail,meta={"item":item})

    def parse_detail(self,response):
        item=BeautifulItem()
        next_url=response.xpath("//div[@id='pages']/a/@href").extract()
        u = re.findall("item/(.*?).html", str(next_url))

        for i in range(3):  #进入小姐姐页面后,循环爬取照片页数
            next_url = "https://www.meitulu.com/item/" + u[i] + ".html"
        info_list=response.xpath("/html/body/div[4]")

        for info in info_list:
            pic=info.xpath("/html/body/div[4]/center/img/@src").extract()
            name =info.xpath("/html/body/div[4]/center/img/@alt").extract()
            item["name"]=name
            item["pic"]=pic
            yield Request(next_url,callback=self.parse_detail,meta={"item":item})
            yield item

items.py

import scrapy

class BeautifulItem(scrapy.Item):
    #片名
    name=scrapy.Field()
    #图片url
    pic=scrapy.Field()

pipelines.py

from scrapy.pipelines.images import ImagesPipeline
from scrapy import Request
from scrapy.exceptions import DropItem
import logging
log=logging.getLogger("SavepicturePipeline")

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

class SavepicturePipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        for img_url in item["pic"]:
            yield Request(url=img_url,meta={'item':item,'index':item["pic"].index(img_url)})

    def item_completed(self, results, item, info): #判断下载是否成功
        if not results[0][0]:
            raise DropItem("下载失败")
        logging.debug("下载成功")
        return item

    def file_path(self, request, response=None, info=None):  #保存图片路径与图片名称
        item=request.meta["item"]
        index=request.meta["index"]
        image_name=item["name"][index]+".jpg"

        return image_name

settings.py

BOT_NAME = 'Beautiful'

SPIDER_MODULES = ['Beautiful.spiders']
NEWSPIDER_MODULE = 'Beautiful.spiders'
IMAGES_STORE="D:\\picture"  #保存地址

DEFAULT_REQUEST_HEADERS = {
'USER_AGENT':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
'Referer':'www.google.com',
}

ITEM_PIPELINES = {
   'Beautiful.pipelines.BeautifulPipeline': 300,
   'Beautiful.pipelines.SavepicturePipeline':400,
}

可以设置很多请求头或者随机ip,但是我感觉没太大必要,就练个手。
大家看个乐就好,我是初学的,如果有不足的地方我很乐意接受批评,敬请指正。

额.png

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
r_o_b_o_t + 1 + 1 我很赞同!
Zeaf + 1 + 1 用心讨论,共获提升!
hj170520 + 1 + 1 最近营养快线不够喝啊

查看全部评分

本帖被以下淘专辑推荐:

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

萝莉兔女郎 发表于 2020-7-22 03:17
hei hei jian zhi jue la
Zeaf 发表于 2020-5-13 18:55
热心市民小丑 发表于 2020-5-13 18:45
用框架的话简便点把,多线程快点,下载图片能直接调用内置函数,不然还要去写保存图片的方式挺麻烦的,不 ...

自己写爬虫的时候都是自己写保存和多线程
但看到大大佬们都用这个框架干一些很厉害的事
我看到你写的我能看明白所以问问,我才是萌新
ciker_li 发表于 2020-5-12 22:05
Zeaf 发表于 2020-5-12 23:15
想问一下用这个框架和不用有什么区别?
Smurfs9 发表于 2020-5-12 23:27
这个站的图质量挺高,可以玩玩
qq7731795 发表于 2020-5-13 03:19
没太看明白,我觉得应该用crawlspider
 楼主| 热心市民小丑 发表于 2020-5-13 18:45
Zeaf 发表于 2020-5-12 23:15
想问一下用这个框架和不用有什么区别?

用框架的话简便点把,多线程快点,下载图片能直接调用内置函数,不然还要去写保存图片的方式挺麻烦的,不过爬这个其实也是大材小用把,我也就图个方便,初学者
hululove 发表于 2020-5-26 12:08
这个怎么用啊
3D52 发表于 2020-7-22 00:16
我去 整的挺厉害啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-26 03:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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