Scrapy框架学习(三)----基于Scrapy框架实现的简单爬虫案例

Scrapy框架学习(三)—-Scrapy框架实现简单的爬虫程序

前面2章讲解了Scrapy的基本内容,如:创建项目,配置settings.py,items,spider,item pipeline,scrapy shell等概念,现在我们使用之前学习的内容,来实现一个爬虫案例。

爬虫案例以虎嗅网新闻子页面为例。页面的url:https://www.huxiu.com/channel/104.html,爬取的内容:标题、发布者以及摘要三个字段。

因为是初学Scrapy,爬取的数据比较简单,下面的scrapy实现爬虫的步骤:

  1. 创建项目
  2. 创建Item,定义好需要数据的字段
  3. 创建Spider,设置需要获取数据的解析规则
  4. 创建Item Pipeline,保存需要的数据
  5. 修改settings.py的设置
  6. 运行项目
1. 创建项目

在项目的父目录,通过命名scrapy startproject huxiu,创建项目,通过PyCharm打开项目。

项目目录如下:

image

2. 创建Item,定义好需要数据的字段

在items.py文件中,创建一个HuxiuItem的类(默认创建),在类中定义好我们需要的字段。如:

import scrapy

class HuxiuItem(scrapy.Item):
    title = scrapy.Field()
    publisher = scrapy.Field()
    abstract = scrapy.Field()
3. 创建Spider,设置需要获取数据的解析规则

在spider目录创建一个huxiu_spider.py文件,在该文件中定义HuxiuSpider类,定义spider的名称,需要爬取的url,实现parse()方法。如:

import scrapy
from huxiu.items import HuxiuItem


class HuxiuSpider(scrapy.Spider):
    # Spider的名称
    name = 'huxiu'

    # 爬取的url
    start_urls = ['https://www.huxiu.com/channel/104.html']

    def parse(self, response):
        """
        解析页面的响应数据,因为解析的数据比较多,使用yield关键字,将怎个方法作为生成器,迭代获取解析的数据
        :param response: 响应的数据
        :return:
        """
        # 解析列表,获取当前页面所有的列表数据
        for sele in response.xpath('//div[@class="mob-ctt"]'):
            # 创建item对象
            item = HuxiuItem()

            # 解析到标题的标签
            element = sele.xpath("./h2/a/text()")
            # 获取到标题的标签的文本数据
            title = element[0].extract()
            # 解析到摘要的标签
            element = sele.xpath('.//div[@class="mob-sub"]/text()')
            # 获取到摘要的文本数据
            abstract = element[0].extract()
            # 解析到发布者的标签
            element = sele.xpath('.//span[@class="author-name"]/text()')
            # 获取到发布者的文本数据
            publisher = element[0].extract()

            # 将文本信息,赋值给item
            item['title'] = title
            item['publisher'] = publisher
            item['abstract'] = abstract
            # 作为生成器,返回
            yield item
4. 创建Item Pipeline,保存需要的数据

pipeline.py文件中,定义HuxiuPipeline类,我们需要将item的数据,写入到文件,需要在初始化时,创建文件对象,在process_item()写入文件,在close_spider()将文件关闭(以后可以使用数据库来存储)。具体如下:

import json


class HuxiuPipeline(object):
    def __init__(self):
        # 在初始化时,创建一个file对象
        self.file = open('huxiu.json', 'w', encoding='utf-8')

    def process_item(self, item, spider):
        # 通过将item转成字典类型,在转成json数据
        content = json.dumps(dict(item), ensure_ascii=False) + "\n"
        # 将内容写到文件中
        self.file.write(content)

        # 返回item,必须返回
        return item

    def close_spider(self, spider):
        # 在爬虫结束后,关闭文件
        self.file.close()
5. 修改settings.py的设置

修改settings.py文件,将ITEM_PIPELINES的注释打开,将HuxiuPipeline类配置好(默认已配置)。将DEFAULT_REQUEST_HEADERS的注释打开,配置好请求头数据。如:

DEFAULT_REQUEST_HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    # 'Accept-Language': 'en',
}

...

ITEM_PIPELINES = {
   'huxiu.pipelines.HuxiuPipeline': 300,
}
6. 运行项目

接下来就是运行项目了,在控制台执行下面命令:

scrapy crawl huxiu

在项目的根目录就会生成一个huxiu.json文件。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值