scrapy爬虫框架实现翻页数据爬取-网页实战

  本篇博文将介绍如何搭建爬虫项目实现简单地翻页爬取信息,并给出运行结果,把结果保存为本地json文件或者csv文件。详细的项目搭建操作已经在前面博文中提及了,可以参考:
https://blog.csdn.net/fallwind_of_july/article/details/97246577
  文章非常适合入门的小伙伴们一起学习和研究。经过实测验证,代码可以成功运行。文章最后给出github免费的源码下载地址。
.

一、爬取目标网站:

选择任意文本网站。可以是学校或新闻相关栏目。
.
.

二、爬取目标信息:

  我们将要爬取公告的标题,时间以及链接,如下图所示:在这里插入图片描述

我们不仅要爬取第一页,还要让程序自动爬取后面的页码。
.

三、网页分析:

用谷歌浏览器和xpath Helper插件,F12键来分析源代码
在这里插入图片描述
可以看出我们需要的名字、时间、链接对应的xpath分别是:
//ul[@class='news_list']/li/a
//ul[@class='news_list']/li/span
//ul[@class='news_list']/li/a/@href
.

四、爬取文件代码

1.items.py文件

import scrapy

class GzgovItem(scrapy.Item):

    name = scrapy.Field()
    time = scrapy.Field()
    link = scrapy.Field()

以上文件定义我们获取信息的字段
.

2.pipelines.py

import json

class GzgovPipeline(object):
    def __init__(self):
        #self.f = open("gzgovment.json","w")
        self.f = open("gzgovment.csv","w")
        
    def process_item(self, item, spider):
        content = json.dumps(dict(item),ensure_ascii=False) +",\n"
        self.f.write(content)
        return item
    
    def close_spider(self,spider):
        self.f.close()

以上文件定义我们保持数据的格式,写到本地文件中
.

3.settings.py

1.文件中下面的True改为False

ROBOTSTXT_OBEY = False

2.取消67行左右的注释,得到

ITEM_PIPELINES = {
    'Gzgov.pipelines.GzgovPipeline': 300,
}

以上文件为配置文件
.

4.我们的爬虫文件govmenu.py

爬虫文件名字自定义,在spiders目录下

# -*- coding: utf-8 -*-
import scrapy
from Gzgov.items import GzgovItem
#from scrapy.http import Request

class GovmenuSpider(scrapy.Spider):
    name = 'govmenu'
    allowed_domains = ['gz.gov.cn']
    #start_urls = ['http://www.gz.gov.cn/gzgov/snzc/common_list.shtml']
    baseURL = "http://www.gz.gov.cn/gzgov/snzc/common_list_"
    offset = 1
    end = ".shtml"
    start_urls = ["http://www.gz.gov.cn/gzgov/snzc/common_list.shtml"]

    def parse(self, response):
        node_list = response.xpath("//ul[@class='news_list']/li")

        for node in node_list:

            item = GzgovItem()

            item['name'] = node.xpath("./a/text()").extract()
            item['time'] = node.xpath("./span/text()").extract()
            item['link'] = node.xpath("./a/@href").extract()
            
            yield item
            
        if self.offset < 66:
            self.offset +=1
            url = self.baseURL + str(self.offset) + self.end
            yield scrapy.Request(url,callback=self.parse)
 

以上文件的解释:
我们采用url拼接的方式进行数据的翻页爬取,
比如第二页的url就是:
http://www.gz.gov.cn/gzgov/snzc/common_list_2.shtml
以此类推,每次只需要修改数字部分即可。总共67个条目,因此我们判断<66。
.

五、运行结果

1.cvs格式

在这里插入图片描述

2.json格式

在这里插入图片描述

  到这里,我们就成功地实现了scrapy爬虫。
.

六、附录

本文的源码下载(Gzgov文件夹):
https://github.com/AndyofJuly/scrapyDemo

  如果有帮助到你,请点个赞或关注对博主进行鼓励,感谢!

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用定时任务来实现定时爬取数据的功能。在Scrapy中,你可以使用类似于APScheduler或者Celery这样的库来实现定时任务的调度。 首先,你需要安装相应的库。对于APScheduler,你可以使用以下命令进行安装: ``` pip install apscheduler ``` 对于Celery,你可以使用以下命令进行安装: ``` pip install celery ``` 接下来,你需要创建一个定时任务的函数。这个函数将会被定时调用,用于触发爬虫的执行。在这个函数中,你需要使用Scrapy提供的命令行接口来启动爬虫。例如,你可以使用以下的代码来启动爬虫: ```python from scrapy.cmdline import execute def run_spider(): execute(["scrapy", "crawl", "your_spider_name"]) ``` 然后,你需要创建一个定时任务的调度器,并设置相应的定时规则。下面是一个使用APScheduler的例子: ```python from apscheduler.schedulers.blocking import BlockingScheduler scheduler = BlockingScheduler() # 每天执行一次定时任务 scheduler.add_job(run_spider, 'interval', days=1) # 开始调度任务 scheduler.start() ``` 对于Celery,你可以使用以下代码来创建定时任务: ```python from celery import Celery from datetime import timedelta app = Celery('your_app_name') app.conf.beat_schedule = { 'run_spider_task': { 'task': 'your_task_module.run_spider', 'schedule': timedelta(days=1), }, } app.conf.timezone = 'UTC' ``` 最后,你需要启动定时任务的调度器。对于APScheduler,你可以使用以下代码: ```python scheduler.start() ``` 对于Celery,你可以使用以下命令来启动调度器: ``` celery -A your_app_name beat ``` 这样,你就实现了定时爬取数据的功能。定时任务将会按照你设置的时间规则自动触发爬虫的执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值