您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

保姆式教程带大家爬取高清图片

时间:2020-09-09 10:53:36  来源:  作者:

有些日子没写虫了,今日心血来潮,来写写,但也不知道爬啥,于是随便找了个网站试试手。

唯美女生

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 

一、环境搭建

本爬虫使用Scrapy框架进行爬取

scrapy startproject Weimei
cd Weimeiscrapy genspider weimei "weimei.com"
你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


修改settings.py文件

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


设置文件下载路径

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 

编写启动文件start.py

from scrapy import cmdline
cmdline.execute("scrapy crawl weimei".split())

二、网页分析

今日就先爬个摄影写真吧,

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


该网页是个典型的瀑布流网页

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


所以我们有两种处理办法

  1. 使用selenium操控浏览器滑轮,然后获取整个页面的源码
  2. 在网页向下滑动时,查看发送的请求,根据请求来进行爬取(相当于滑动的效果)

我使用的时第二种

可以看到,向下滑动,浏览器发出ajax请求

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


请求方式为POST

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


带有参数

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


可以推断出,paged相当于页面页数,既然如此,只要把paged改为1,就相当于第一页,通过修改paged反复请求可以实现多页爬取

三、代码分析

weimei.py

class WeimeiSpider(scrapy.Spider):
    name = 'weimei'
    # allowed_domains = ['vmgirls.com']
    # start_urls = ['https://www.vmgirls.com/photography']
	
	#post请求提交的数据,可见网页分析
    data = {
        "Append": "list - archive",
        "paged": "1",  #当前页数
        "action": "ajax_load_posts",
        "query": "17",
        "page": "cat"
    }	#重写start_requests    def start_requests(self):
    	#进行多页爬取,range(3) -> 0,1,2
        for i in range(3):
            #设置爬取的当前页数            #range是从0开始
            self.data["paged"] = str(1 + i)
            #发起post请求            yield scrapy.FormRequest(url="https://www.vmgirls.com/wp-admin/admin-ajax.php", method='POST',
                                 formdata=self.data, callback=self.parse)
	    def parse(self, response):
    	#使用BeautifulSoup的lxml库解析
        bs1 = BeautifulSoup(response.text, "lxml")
                #图1
        div_list = bs1.find_all(class_="col-md-4 d-flex")
        #遍历        for div in div_list:
            a = BeautifulSoup(str(div), "lxml")
                        #参考图2
            #详情页Url
            page_url = a.find("a")["href"]
            #每一份摄影写真名称            name = a.find("a")["title"]
            #发送get请求,去请求详情页,带上name参数
            yield scrapy.Request(url=page_url,callback=self.page,meta = {"name": name})
		#详情页爬取    def page(self,response):
		#拿到传过来的name参数        name = response.meta.get("name")
        bs2 = BeautifulSoup(response.text, "lxml")
        #参考图3
        img_list = bs2.find(class_="nc-light-gallery").find_all("img")
        for img in img_list:
            image = BeautifulSoup(str(img), "lxml")
            #图4
            #注意,我拿取的时data-src不是src            #data-src是html5的新属性,意思是数据来源。            #图片url            img_url = "https://www.vmgirls.com/" + image.find("img")["data-src"]
                        item = WeimeiItem(img_url=img_url, name=name)
            yield item

pipelines.py

class WeimeiPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        img_url = item["img_url"]
        name = item["name"]
        yield scrapy.Request(url=img_url, meta={"name": name})
    def file_path(self, request, response=None, info=None):
        name = request.meta["name"]
        img_name = request.url.split('/')[-1]
		#拼接路径,使每个摄影写真系列的图片都存放于同意文件夹中
        img_path = os.path.join(name,img_name)
        # print(img_path)
        return img_path  # 返回文件名
    def item_completed(self, results, item, info):
        # print(item)
        return item  # 返回给下一个即将被执行的管道类

四、图片辅助分析

图1

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


图2

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


图3

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


图4

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


五、运行结果

你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


你们要的小姐姐来啦!保姆式教程带大家爬取高清图片

 


六、完整代码

weimei.py

# -*- coding: utf-8 -*-
import scrapyfrom Weimei.items import WeimeiItemfrom bs4 import BeautifulSoupclass WeimeiSpider(scrapy.Spider):    name = 'weimei'
    # allowed_domains = ['vmgirls.com']
    # start_urls = ['https://www.vmgirls.com/photography']
    data = {        "append": "list - archive",
        "paged": "1",
        "action": "ajax_load_posts",
        "query": "17",
        "page": "cat"
    }    def start_requests(self):
        for i in range(3):
            self.data["paged"] = str(int(self.data["paged"]) + 1)
            yield scrapy.FormRequest(url="https://www.vmgirls.com/wp-admin/admin-ajax.php", method='POST',
                                 formdata=self.data, callback=self.parse)
    def parse(self, response):
        bs1 = BeautifulSoup(response.text, "lxml")
        div_list = bs1.find_all(class_="col-md-4 d-flex")
        for div in div_list:
            a = BeautifulSoup(str(div), "lxml")
            page_url = a.find("a")["href"]
            name = a.find("a")["title"]
            yield scrapy.Request(url=page_url,callback=self.page,meta = {"name": name})
    def page(self,response):
        name = response.meta.get("name")
        bs2 = BeautifulSoup(response.text, "lxml")
        img_list = bs2.find(class_="nc-light-gallery").find_all("img")
        for img in img_list:
            image = BeautifulSoup(str(img), "lxml")
            img_url = "https://www.vmgirls.com/" + image.find("img")["data-src"]
            item = WeimeiItem(img_url=img_url, name=name)            yield item

 

items.py

import scrapy
class WeimeiItem(scrapy.Item):
    img_url = scrapy.Field()
    name = scrapy.Field()

pipelines.py

from scrapy.pipelines.images import ImagesPipeline
import scrapyimport osclass WeimeiPipeline(ImagesPipeline):    def get_media_requests(self, item, info):
        img_url = item["img_url"]
        name = item["name"]
        print(img_url)        yield scrapy.Request(url=img_url, meta={"name": name})
    def file_path(self, request, response=None, info=None):
        name = request.meta["name"]
        img_name = request.url.split('/')[-1]
        img_path = os.path.join(name,img_name)        # print(img_path)
        return img_path  # 返回文件名
    def item_completed(self, results, item, info):
        # print(item)
        return item  # 返回给下一个即将被执行的管道类

settings.py

BOT_NAME = 'Weimei'
SPIDER_MODULES = ['Weimei.spiders']
NEWSPIDER_MODULE = 'Weimei.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'Weimei (+http://www.yourdomain.com)'
LOG_LEVEL = "ERROR"
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
#COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False
# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
  "User-Agent": "Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
}
# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    'Weimei.middlewares.WeimeiSpiderMiddleware': 543,
#}
# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
# DOWNLOADER_MIDDLEWARES = {
#    'Weimei.middlewares.AreaSpiderMiddleware': 543,
# }
# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}
# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   'Weimei.pipelines.WeimeiPipeline': 300,
}
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
IMAGES_STORE = "Download"

能搞定了把 如果不像敲代码,需要源代码后台私信小编 源码 即可获取



Tags:爬取   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
今天讲解如何用python爬取芒果TV、腾讯视频、B站、爱奇艺、知乎、微博这几个常见常用的影视、舆论平台的弹幕和评论,这类爬虫得到的结果一般用于娱乐、舆情分析,如:新出一部火...【详细内容】
2021-11-15  Tags: 爬取  点击:(123)  评论:(0)  加入收藏
今天我们仍旧利用scrapy框架实现自动翻页爬取数据,爬取诗词胖排行榜( https://www.shicimingju.com/paiming)中的标题。1.新建文件夹scrapy starproject 文件名(wallpaper)2.新建...【详细内容】
2021-10-21  Tags: 爬取  点击:(62)  评论:(0)  加入收藏
今天带大家使用爬虫来获取免费的ip。1. 打开网站首页,可以看到总共有十页数据,总共100条ip记录。咱们的目的很简单,就是要这100条ip和对应端口号。完了我们再去筛选那些ip是可...【详细内容】
2021-08-17  Tags: 爬取  点击:(72)  评论:(0)  加入收藏
回顾python学习历程,感慨良多,这门语言实在是太强了,当然,分支也很多,有的在做安全,有的在做数据,有的在做爬虫,本文就笔者本身的爬虫入门的小经验分享给读者,期待各位在学习python的...【详细内容】
2021-08-11  Tags: 爬取  点击:(81)  评论:(0)  加入收藏
明确目的带着问题出发,明确我们的目的是探索不同岗位、城市、公司数据人薪资是怎样的,所以是一个探索性分析。数据处理1、查看并理解字段拿到数据,大概看一下,总共有184条记录,量...【详细内容】
2021-07-06  Tags: 爬取  点击:(89)  评论:(0)  加入收藏
前言国内大学最新排名,北大反超,浙大仅第四,中科大跌至第八时隔五年,“双一流”大学即将迎来首次大考,这也是继改变高校评断标准之后,第一次即将以官方对外发布,自然是引来了许多人...【详细内容】
2021-04-08  Tags: 爬取  点击:(351)  评论:(0)  加入收藏
1.前言爬取视频的时候发现,现在的视频都是经过加密(m3u8),不再是mp4或者avi链接直接在网页显示,都是经过加密形成ts文件分段进行播放。今天就教大家如果通过python爬取下载m3u8加...【详细内容】
2021-03-11  Tags: 爬取  点击:(486)  评论:(0)  加入收藏
记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。编程工具:pycharmapp抓包工具:mitmproxyapp自动化工具:appium运行环境:windows10思路:私信小编01即可获取大量Pytho...【详细内容】
2020-12-02  Tags: 爬取  点击:(73)  评论:(0)  加入收藏
众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕。不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评论序列。通过分析弹幕,我们...【详细内容】
2020-10-09  Tags: 爬取  点击:(92)  评论:(0)  加入收藏
大家好,今天我们来讲点Selenium自动化,你是否有特别喜欢的公众号?你有想过如何将一个公众号历史文章全部文章爬下来学习吗?现在我们就演示用Selenium实现这个功能。...【详细内容】
2020-09-25  Tags: 爬取  点击:(51)  评论:(0)  加入收藏
▌简易百科推荐
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(1)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(1)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(7)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(5)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(7)  评论:(0)  加入收藏
借助pyautogui库,我们可以轻松地控制鼠标、键盘以及进行图像识别,实现自动抢课的功能1.准备工作我们在仓库里提供了2个必须的文件,包括: auto_get_lesson_pic_recognize.py:脚本...【详细内容】
2021-12-17  程序员道道    Tags:python   点击:(13)  评论:(0)  加入收藏
前言越来越多开发者表示,自从用了Python/Pandas,Excel都没有打开过了,用Python来处理与可视化表格就是四个字——非常快速!下面我来举几个明显的例子1.删除重复行和空...【详细内容】
2021-12-16  查理不是猹    Tags:Python   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条