分享

爬虫实战(1)| 送你一个漂亮的小姐姐!

 O听_海_轩O 2022-01-24


回顾:

高级爬虫(三):使用Scrapy爬取拉勾网数据并写入数据库

高级爬虫(二):Scrapy爬虫框架初探

高级爬虫(一):Scrapy爬虫框架的安装

今天我们使用scrapy给大家爬取一个lsp的网站,真的超级简单
保证看完之后你也可以~~

图片


scrapy框架介绍


scrapy是由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。

scrapy框架的传送门:
https://

scrapy框架运行原理

图片


Scrapy Engine(引擎):负者Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据转递等。

Scheduler(调度器) :它负责接受引擊发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader (下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎) ,由引擎交给Spider来处理。

Spider (爬虫) :它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。

Item Pipeline(管道) :它负责处理Spider 中获取到的Item ,并进行进行后期处理(详细分析、过滤、存储等)的地方。

Downloader Middlewares (下载中间件) : 你可以当作是一个可以自定义扩 展下载功能的组件。

Spider Middlewares (Spider中间件) : 你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests )

Scrapy爬虫步骤

图片
新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
明确目标 (编写items.py):明确你想要抓取的目标
制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
存储内容 (pipelines.py):设计管道存储爬取内容
图片

今天我们就以小姐姐为例,带大家亲自体验一下scrapy的强大之处!


创建spider项目

首先我们来看看scrapy的常用命令:

scrapy startproject 项目名称    # 创建一个爬虫项目或工程
scrapy genspider 爬虫名 域名     # 在项目下创建一个爬虫spider类
scrapy runspider 爬虫文件       #运行一个爬虫spider类
scrapy list                  # 查看当前项目有多少个爬虫
scrapy crawl 爬虫名称           # 通过名称指定运行爬取信息
scrapy shell url/文件名        # 使用shell进入scrapy交互环境

第一步我们创建一个scrapy工程, 进入到你指定的目录下,使用命令:

scrapy startproject 项目名称    # 创建一个爬虫项目或工程

图片

当我们创建完项目之后,它会有提示,那么我们就按照它的提示继续操作。

You can start your first spider with:    cd xiaojiejei    scrapy genspider example example.com

当你按照上面的操作,之后你就会发现,在spiders文件夹下就会出现spider_xiaojiejie.py这个文件。这个就是我们的爬虫文件。

后面的 就是我们要爬取的目标网站

图片

BliBli
|—— BliBli
|   |—— __init__.py
|   |—— __pycache__.
|   |—— items.py        # Item定义,定义抓取的数据结构
|   |—— middlewares.py  # 定义Spider和Dowmloader和Middlewares中间件实现
|   |—— pipelines.py    # 它定义Item Pipeline的实现,即定义数据管道
|   |—— settings.py     # 它定义项目的全局配置
|   |__ spiders         # 其中包含一个个Spider的实现,每个Spider都有一个文件
        |—— __init__.py

        |—— spider_bl.py # 爬虫实现

        |—— __pycache__
|—— scrapy.cfg  # scrapy部署时的配置文件,定义了配置文件的路径、部署相关的信息内容。
接下来我们来看看我是如何得到这些小姐姐美照的?
确定目标

打开美女网站。我们要获取的目标就两个,美女的照片和标题。

图片

网站分析

我们F12打开浏览器开发者模式,这种静态网站分析起来还是很简单的,因为所有的目标资源都可以在源码中找得到。

图片

可以看见所有的小姐姐信息都存储在一个div标签中,

每一个小姐姐的照片都存储在div标签下的article标签中,

分析至此,接下来就可以上代码了

请求发送

接下来我们在item.py设置我们要抓取的目标信息,前面已经提到过,

就小姐姐照片和一个时间标题

class XiaojiejieItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()

    # 上传时间
    upload_times = scrapy.Field()
    
    # 照片链接
    pictures = scrapy.Field()

首先我们使用最简单的xpath来获取下载链接如下(可以借助插件很简单):

图片

同理获取到时间标题链接

图片

数据获取

定个小目标,先来获取2000张

然后我们在我们创建的spider_xiaojiejiel.py文件中写我们爬虫函数的具体实现

然后使用yield将数据流向管道文件pipelines中。

class SpiderXiaojiejieSpider(scrapy.Spider):
    name = 'spider_xiaojiejie'
    allowed_domains = ['/']
    start_urls = ['http:////']


    def start_requests(self):
        for page in range(1500+1):
            url = f'https://www./page/{page}'
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        item = XiaojiejieItem()

        # 获取当前页面所有小姐姐信息
        divs = response.xpath('//*[@id="masonry"]/article')

        # 提取小姐姐照片和标题
        for div in divs:
            item['upload_times'] = div.xpath("./div[@class='masonry-inner']/h2[@class='entry-title']/a/text()").get()

            item['pictures'] = div.xpath("./div[@class='masonry-inner']/div[@class='entry-top']/a[@class='entry-thumbnail']/img[@class='attachment-gridzone-medium-h size-gridzone-medium-h wp-post-image']/@src").get()

            yield item  # 将获取到的数据抛给pipeline下载

成功获取到我们所需数据部分截图下如下:

图片

图片下载

在上一步我们将获取到的数据抛给了pipeline,

所以这一步我们就在pipeline中将数据下载下来,如下:

class XiaojiejiePipeline:
    def process_item(self, item, spider):
        print(item)
        
        # 创建文件夹
        if not os.path.exists('images'):
            os.mkdir('images')

        # 保存图片到本地
        with open('images/{}.jpg'.format(item['upload_times']), 'wb'as f:
            req = requests.get(item['pictures'])
            f.write(req.content)
            time.sleep(random.random() * 2# 防止网站反爬加上延时处理

        return item

接下来就是欣赏小姐姐美照的时候啦~

图片

图片

图片

图片

图片

图片

各位看官还满意吗?


回顾:

高级爬虫(三):使用Scrapy爬取拉勾网数据并写入数据库

高级爬虫(二):Scrapy爬虫框架初探

高级爬虫(一):Scrapy爬虫框架的安装

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多