Scrapy框架快速入门,以糗事百科为例进行说明【python爬虫入门进阶】(16)

本文是Scrapy框架的快速入门教程,通过创建一个Scrapy项目并以爬取糗事百科为例,讲解了如何新建项目、理解项目目录结构、创建爬虫、解析响应以及设置配置。文章还强调了遵守robots.txt协议和设置User-Agent的重要性。
摘要由CSDN通过智能技术生成

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
😁 1. 社区逛一逛,周周有福利,周周有惊喜码农飞哥社区,飞跃计划
💪🏻 2. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当Python从入门到精通
❤️ 3. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当,持续更新中 。python爬虫入门进阶
❤️ 4. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 5. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
关注下方公众号,众多福利免费嫖;加我VX进群学习,学习的路上不孤单
在这里插入图片描述

Scrapy框架的介绍

Scrapy框架是一个为了爬取网站数据,提取结构性数据而编写的应用框架,也就是说应用Scrapy框架的话,我们就不需要从零开始写一个爬虫项目。

Scrapy框架的安装

通过pip install scrapy 命令即可安装Scrapy框架。

Scrapy框架的官方文档

官方文档: https://doc.scrapy.org/en/latest/
中文文档:https://scrapy-chs.readthedocs.io/zh_CN/0.24/#

Scrapy框架快速入门(以糗事百科为例)

新建一个Scrapy项目

前面安装好Scrapy框架之后,进入安装好Scrapy框架的虚拟环境中,执行如下命令创建一个新的Scrapy项目:

scrapy startproject qsbk

其中:qsbk 是你的scrapy项目的名称,根据实际情况替换。执行成功的结果如下图1所示。
图1

Scrapy项目的目录结构

通过前面的命令创建了一个名为qsbk的Scrapy项目,其目录结构如下图2所示
图2
这些文件分别是:

  1. scrapy.cfg:项目的配置文件
  2. qsbk/ : 该项目的python模块,爬虫代码都需要在这里编写
  3. qsbk/items.py : 项目中的item文件,用来存放爬虫爬下来数据的模型。
  4. qsbk/middlewares.py : 用来存放各种中间件的文件
  5. qsbk/pipelines.py : 用来将items 的模型存储到本地磁盘中。
  6. qsbk/settings.py: 本爬虫的一些配置信息(比如请求头,多久发送一次请求,ip代理池等)
  7. qsbk/spider:以后所有的爬虫,都是存放到这个里面。

使用Scrapy框架爬取糗事百科段子

1. 使用命令创建一个爬虫
scrapy genspider spider_qsbk "qiushibaike.com"

命令说明:

  1. scrapy genspider 这部分固定不变。表示创建一个爬虫
  2. spider_qsbk 指定的爬虫的名字,该名字不能与scrapy项目的名字重名,不然就会出现Cannot create a spider with the same name as your project的错误。
  3. "qiushibaike.com"这部分指定的是爬虫的网站的域名。
    在这里插入图片描述
    执行该命令之后我们可以看到在qsbk/spider/ 目录下会出现一个名为spider_qsbk.py的文件。
2. 爬虫代码解析

进到spider_qsbk.py 文件里,可以看到已经生成了如下代码:

class SpiderQsbkSpider(scrapy.Spider):
    # 标识爬虫的名字
    name = 'spider_qsbk'
    # 标识爬虫允许的域名
    allowed_domains = ['qiushibaike.com']
    # 开始的页
    start_urls = ['https://www.qiushibaike.com']

    def parse(self, response):
       pass

要创建一个Spider,必须自定义一个类,继承自scrapy.Spider, 然后,在这个类中定义三个属性和一个方法。

  1. name: 这个爬虫的名字,名字必须是唯一的。
  2. allow_domains: 允许的域名,爬虫只会爬取该域名下的网页,其他不是这个域名下的网页会被自动忽略。
  3. start_urls: 爬虫从这个变量中的url开始,可以存放多个url。
  4. parse 方法,用于编写爬虫代码,该方法默认是没有任何实现的。
3. 修改settings.py中的配置

在做爬虫之前,一定要记得修改settings.py中的设置。这两处地方强烈建议设置。

  1. ROBOTSTXT_OBEY 设置为False。默认为True。即遵守机器协议,那么在爬虫的时候,Scrapy首先会去找robots.txt文件, 如果没有找到,则会停止爬虫。
  2. DEFAULT_REQUEST_HEADERS 添加User-Agent。这个就是告诉服务器,我这个请求是一个正常的请求,不是一个爬虫。如果不设置User-Agent的话,在请求爬虫时很可能会出现如下错误:
    在这里插入图片描述
4. 打印response

首先让我们来看下response的类型,首先从第一页开始爬取数据。

class SpiderQsbkSpider(scrapy.Spider):
    # 标识爬虫的名字
    name = 'spider_qsbk'
    # 标识爬虫允许的域名
    allowed_domains = ['qiushibaike.com']
    # 开始的页
    start_urls = ['https://www.qiushibaike.com/text/page/1/']

    def parse(self, response):
        print('=' * 40)
        print(type(response))
        print('=' * 40)

运行spider的话也需要通过命令来运行。在qsbk项目所在的虚拟环境下执行如下命令。

scrapy crawl spider_qsbk

执行的结果如下图3所示:
在这里插入图片描述
可以看出response是一个scrapy.http.response.html.HtmlResponse 类。后面的文章会对该类进行详细介绍,这里只需要知道该类下面有一个xpath方法即可。即可以直接调用xpath表达式。

5. 爬取数据

这里只是简单的演示爬取第一页的数据,爬取的内容是段子的作者和段子的内容。

class SpiderQsbkSpider(scrapy.Spider):
    # 标识爬虫的名字
    name = 'spider_qsbk'
    # 标识爬虫允许的域名
    allowed_domains = ['qiushibaike.com']
    # 开始的页
    start_urls = ['https://www.qiushibaike.com/text/page/1/']

    def parse(self, response):
        print(type(response))
        # SelectorList
        div_list = response.xpath('//div[@class="article block untagged mb15 typs_hot"]')
        print(type(div_list))
        for div in div_list:
            # Selector
            author = div.xpath('.//h2/text()').get().strip()
            print(author)
            content = div.xpath('.//div[@class="content"]//text()').getall()
            content = "".join(content).strip()
            print(content)

response.xpath方法返回的是一个scrapy.selector.unified.SelectorList类,该类继承自list类。故该类是一个序列,可以进行遍历。遍历得到的对象是Selector对象。
通过getall 或者get 方法来获取其中的字符串。
其中:1. getall 方法:获取Selector中的所有文本,返回的是一个列表
2. get 方法:获取的是Selector 中的第一个文本,返回的是一个str类型。
再次执行scrapy crawl spider_qsbk 命令得到的结果是:
在这里插入图片描述

6. 将执行爬虫的命令放在py文件中

每次运行爬虫都要执行scrapy crawl spider_qsbk 命令,着实有点不好弄。我们可以将命令放在一个py文件中,每次执行该py文件即可。这里我定义了一个名为start.py 的文件。

from scrapy import cmdline

cmdline.execute('scrapy crawl spider_qsbk'.split())
"""
等价于
cmdline.execute(['scrapy','crawl','spider_qsbk'])
"""

以后运行爬虫只需要执行start.py文件即可。

总结

本文以糗事百科为例,简单介绍了Scrapy框架的快速入门。

粉丝专属福利

软考资料:实用软考资料

面试题:5G 的Java高频面试题

学习资料:50G的各类学习资料

脱单秘籍:回复【脱单】

并发编程:回复【并发编程】

											👇🏻 验证码 可通过搜索下方 公众号 获取👇🏻 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农飞哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值