scrapy实战2586个小姐姐带回家

简介: scrapy实战2586个小姐姐带回家

今天我们使用scrapy给大家一个lsp的网站,真的超级简单

保证看完之后你也可以~~

scrapy框架介绍

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

scrapy框架的传送门:

https://scrapy.org

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这个文件。这个就是我们的文件。

后面的 kanxiaojiejie.com/ 就是我们要的目标网站

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设置我们要抓取的目标信息,前面已经提到过,

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

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

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

cl

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

同理获取到时间标题链接

数据获取

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

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

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

class SpiderXiaojiejieSpider(scrapy.Spider):
    name = 'spider_xiaojiejie'
    allowed_domains = ['kanxiaojiejie.com/']
    start_urls = ['http://kanxiaojiejie.com//']
 
 
    def start_requests(self):
        for page in range(1, 500+1):
            url = f'https://www.kanxiaojiejie.com/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


各位看官还满意吗?


相关文章
|
15天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
59 6
|
16天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
39 4
|
6月前
|
存储 前端开发 机器人
Python网络数据抓取(6):Scrapy 实战
Python网络数据抓取(6):Scrapy 实战
62 2
|
数据采集 XML 存储
【新闻推荐系统】(task3)Scrapy基础及新闻爬取实战
一、Scrapy的简介与安装 python环境的安装: python 环境,使用minicon
618 0
【新闻推荐系统】(task3)Scrapy基础及新闻爬取实战
|
数据采集 JSON 安全
|
数据采集 JSON 数据格式
基于python的Scrapy爬虫框架实战
基于python的Scrapy爬虫框架实战 2018年7月19日笔记 1.伯乐在线 网站页面如下图所示: 网站页面.png 1.1 新建爬虫工程 命令:scrapy startproject BoleArticle 新建爬虫工程命令 命令:scrapy genspider article "blog.jobbole.com" 注意:运行此命令时必须在爬虫工程文件夹内,如下图路径所示。
1624 0
|
SQL 数据采集 Web App开发
爬虫入门之Scrapy框架实战(新浪百科豆瓣)(十二)
一 新浪新闻爬取 1 爬取新浪新闻(全站爬取) 项目搭建与开启 scrapy startproject sina cd sina scrapy genspider mysina http://roll.
|
数据采集 NoSQL 关系型数据库
scrapy 实战练习
前一篇文章介绍了很多关于scrapy的进阶知识,不过说归说,只有在实际应用中才能真正用到这些知识。所以这篇文章就来尝试利用scrapy爬取各种网站的数据。
1824 0
|
Python
Scrapy实战-下载豆瓣图书封面
紧接着再识Scrapy-爬取豆瓣图书,我们打算把每一本图书的封面都爬下来,毕竟下载图片是一件很棒的事。可以凭借这招去搜集各种表情包呢,还可以省了在某榴辛辛苦苦一个一个打开网页的烦恼呢。
907 0
|
1月前
|
数据采集 中间件 开发者
Scrapy爬虫框架-自定义中间件
Scrapy爬虫框架-自定义中间件