使用Scrapy爬取励志名句————祝万千学子高考顺利

18 篇文章 0 订阅
11 篇文章 0 订阅

6月7日,2021年全国高考正式拉开大幕,1078万考生将赶赴考场,迎接人生路上的一次大考。在此,我将使用Scrapy爬取一些励志名句献给广大的高考考生,祝他们高考顺利,学业有成!

流程分析

创建项目
创建爬虫程序
进行初始化设置
分析网页并创建Item
代码实现

创建项目

首先,我们要创建一个项目,通过下面的命令来实现创建项目:

scrapy startproject gsw

执行上述代码后,可以看到在文件下创建了一个名为gsw的项目文件夹,其目录结构如下:
在这里插入图片描述

创建爬虫程序

创建好项目后,我们需要先创建一个爬虫程序,之后用来解析网页数据以及生成新的请求。
执行以下代码创建爬虫程序:

cd gsw
scrapy genspider start so.gushiwen.cn

进入刚才创建的gsw文件夹,然后执行genspider命令,第一个参数是spider的名称,第二个参数是网站域名。执行后会在spiders文件夹中生成一个start,也就是刚刚创建的爬虫程序。

进行初始化配置

我们可以在settings.py文件中进行一些配置,例如可以设置日志等级,添加请求头等,具体如下:

ROBOTSTXT_OBEY = False
LOG_LEVEL = 'WARNING'
# 打开项目管道
ITEM_PIPELINES = {
   'gsw.pipelines.GswPipeline': 300,
}
# 添加请求头
DEFAULT_REQUEST_HEADERS = {
   'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.41',
   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
   'Accept-Language': 'en',
}

分析网站并创建Item

查看网页源代码可以发现,所有的数据都在一个class为son的div标签当中,我们可以先获取到该div,然后遍历其中所有的class为cont的div标签,从中提取相应数据。在此,我们需要提取的数据有诗句以及出处。因此,我们可以在Items中这样写:

import scrapy

class GswItem(scrapy.Item):
    content = scrapy.Field()
    source = scrapy.Field()

代码实现

至此,我们就可以开始编写代码了。

首先在start.py中添加如下代码:

import scrapy
from gsw.items import GswItem


class StartSpider(scrapy.Spider):
    name = 'start'
    allowed_domains = ['so.gushiwen.cn']
    start_urls = ['https://so.gushiwen.cn/mingjus/default.aspx?tstr=%e5%8a%b1%e5%bf%97']

    def parse(self, response):
        item = GswItem()
        divs = response.xpath('//div[@class="left"]/div[@class="sons"]/div[@class="cont"]')
        for div in divs:
            item['content'] = div.xpath('./a/text()').extract()[0]
            item['source'] = div.xpath('./a/text()').extract()[1]
            yield item

在pipelines.py文件中添加如下代码:

class GswPipeline:
    def process_item(self, item, spider):
        with open('result.txt','a',encoding='utf-8') as f:
            f.write(item['content']+item['source']+'\n')
        return item

运行结果后,会在gsw目录下生成result.txt文件,结果如下:
在这里插入图片描述

爬取多页数据

我们可以通过构造新的URL去爬取多页数据,这里提供两种方法,一是分析网页URL规律,二是从响应数据中提取新的URL。在此,我们使用第二种方法。新增代码如下:

href = response.xpath('//div[@class="pagesright"]/a[1]/@href').extract_first()
url = response.urljoin(href)
yield scrapy.Request(url)

这样就可以实现多页爬取,运行程序后,即可爬取多页数据,最终结果如下:
在这里插入图片描述

结语

到此,我们的项目就全部结束了,最后借用韩愈的“口衔山石细,心望海波平”祝各位高考学子都拥有远大志向,榜上有名,考入心中理想的大学!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值