Scrapy框架爬取海量妹子图-2019-11更新

1、安装Scrapy框架

  1. 直接pip3 install scrapy
  2. 本机测试正常运行。

2.创建scrapy项目

  1. cd scrapy
  2. cd scrapy
    scrapy startproject meizi
    
    New Scrapy project 'meizi', using template directory 'e:\\py3\\lib\\site-packages\\scrapy\\templates\\project', created in:
        F:\scrapy\meizi
    You can start your first spider with:
        cd meizi
        scrapy genspider example example.com

     

  3. 文件夹目录如下:
    
    |-tutorial
    |-scrapy.cfg
      |-__init__.py
      |-items.py
      |-middlewares.py
      |-pipelines.py
      |-settings.py
      |-spiders
        |-__init__.py
    
    文件的功能:
    scrapy.cfg:配置文件
    spiders:存放你Spider文件,也就是你爬取的py文件
    items.py:相当于一个容器,和字典较像
    middlewares.py:定义Downloader Middlewares(下载器中间件)和Spider Middlewares(蜘蛛中间件)的实现
    pipelines.py:定义Item Pipeline的实现,实现数据的清洗,储存,验证。
    settings.py:全局配置
  4. 然后基于basic模板创建一个名为的「jiandan」爬虫文件。

    1

    2

    3

    4

    5

    cd meizi

    scrapy genspider -t basic jiandan jiandan.net --nolog

     

    Created spider 'jiandan' using template 'basic' in module:

      meizi.spiders.jiandan

  5. Scrapy 框架目录结构

     

    items.py 文件

    items.py 文件中定义提取的 Item,这里只定义了图片地址 img_url。

    1

    2

    3

    4

    5

    import scrapy

     

     

    class MeiziItem(scrapy.Item):

        img_url = scrapy.Field()

     

    jiandan.py 文件

  6. # -*- coding: utf-8 -*-
    import scrapy
    from meizi.items import MeiziItem
    from selenium import webdriver
    import base64
    
    chrome_driver='D:\scrapy\chromedriver.exe'
    browser = webdriver.Chrome(executable_path=chrome_driver)
    browser.maximize_window()
    
    
    class JiandanSpider(scrapy.Spider):
        name = 'jiandan'
        allowed_domains = ['jiandan.net']
        url = "http://i.jandan.net/ooxx/"
        page = 1
        start_urls = [url + 'MjAxOTExMTUt' + str(base64.b64encode(str(page).encode('utf-8'))) + "#comments"]
    
        def parse(self, response):
            browser.get(response.url)
            browser.implicitly_wait(15)
            a_list = browser.find_elements_by_link_text("[查看原图]")
            for a in a_list:
                item = MeiziItem()
                print(a.get_attribute('href'))
                item['img_url'] = a.get_attribute('href')    # 提取图片链接
                yield item
            if self.page < 38:   # 最大页面数,每天可能有变动,可优化
                self.page += 1
                print(self.page)
            print(self.url + 'MjAxOTExMTUt'+str(base64.b64encode(str(self.page).encode('utf-8')), 'utf-8'))
            yield scrapy.Request(self.url + 'MjAxOTExMTUt'+str(base64.b64encode(str(self.page).encode('utf-8')), 'utf-8') + "#comments", self.parse,dont_filter=True)
    

    settings.py 文件

  7. ITEM_PIPELINES = {
       'meizi.pipelines.MeiziPipeline': 300,
    }

pipelines.py 文件

编写 Pipeline 来存储提取到的数据,保存到本地。

保存到本地

在本地新建好保存图片的路径。

1

2

3

4

5

6

7

8

9

10

11

12

13

import requests

 

 

class MeiziPipeline(object):    # 保存到本地

    count = 1

 

    def process_item(self, item, spider):

        result = requests.get(item['img_url'])

        with open("E:\\img\\jiandan\\" + str(self.count) + ".jpg", 'wb') as f:

            f.write(result.content)

            f.close()

        self.count += 1

        return item

运行爬虫框架

有两种方法可运行,我用的是第二种。
1. cmd 中输入命令运行

1

scrapy crawl jiandan

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值