使用scrapy爬取新浪新闻

本文介绍了如何使用Scrapy框架爬取新浪新闻。关键步骤包括观察网页结构,定义item和meta参数,创建爬虫项目,设置items.py,编写newsina.py爬虫文件,实现数据管道pipelines.py,调整settings.py配置,并进行测试。过程中强调了item位置的重要性以及如何过滤无效数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用scrapy爬取新浪新闻
思路:通过观察,获取某节点作为当前节点,然后依次遍历大类链接 小类链接 子链接
要点:注意item和meta参数的使用。详情见代码newsina.py里面相关的注释
总结:个人因为item的位置,导致浪费了好多时间。
流程如下:

  1. 创建爬虫项目sina2

    scrapy startproject sina2
    
  2. 设置items.py文件,存储要爬取的数据类型及字段名字

    
    # -*- coding: utf-8 -*-
    
    import scrapy
    
    
    class Sina2Item(scrapy.Item):
        # 大类链接和url,如新闻 体育等
        parentUrl = scrapy.Field()
        parentTitle = scrapy.Field()
    
        # 小类链接和url,如新闻下面的国内 社会等
        subUrl = scrapy.Field()
        subTitle = scrapy.Field()
        # 小类存储路径
        subpath = scrapy.Field()
    
        # 子链接
        sonUrl = scrapy.Field()
        # 子链接里面的标题和内容
        head = scrapy.Field()
        content = scrapy.Field()
    
  3. 创建爬虫文件newsina.py

    
    # -*- coding: utf-8 -*-
    
    import os
    import scrapy
    from sina2.items import Sina2Item
    
    
    class NewsinaSpider(scrapy.Spider):
        name = 'newsina'
        allowed_domains = ['sina.com.cn']
        start_urls = ['http://news.sina.com.cn/guide/']
    
        def 
### 使用 Scrapy 框架爬取新浪财经新闻 #### 创建 Scrapy 项目 要在 Python 中使用 Scrapy 框架来构建一个用于抓取新浪财经新闻的爬虫程序,首先需要初始化一个新的 Scrapy 项目。这可以通过命令行工具完成: ```bash scrapy startproject sina_news_crawler ``` 该命令会在当前工作目录下创建名为 `sina_news_crawler` 的新文件夹,其中包含了必要的配置文件和默认结构。 #### 定义 Item 类型 (items.py) Item 是用来保存网页解析后的数据项的对象模型。对于新浪财经新闻而言,可能关心的信息包括标题、发布时间以及文章链接等属性。因此可以在 `items.py` 文件内定义如下类: ```python import scrapy class SinaNewsItem(scrapy.Item): title = scrapy.Field() # 新闻标题 publish_time = scrapy.Field() # 发布时间 url = scrapy.Field() # 文章URL地址 ``` 上述代码片段定义了一个简单的 Item 结构,专门针对新浪财经新闻页面中的特定信息进行了封装[^1]。 #### 编写 Spider 抓取逻辑 (spiders/sina.py) 接下来就是编写具体的 spider 脚本了。Spiders 是负责执行实际 HTTP 请求并处理响应的核心组件之一。下面是一个简化版的例子展示如何设置初始请求 URL 列表,并指定回调函数来提取所需的内容: ```python import scrapy from ..items import SinaNewsItem class SinaSpider(scrapy.Spider): name = 'sina' allowed_domains = ['finance.sina.com.cn'] start_urls = [ 'https://finance.sina.com.cn/stock/', 'https://finance.sina.com.cn/fund/' ] def parse(self, response): news_list = response.css('.listBlk li a::attr(href)').getall() for link in news_list: yield scrapy.Request(link, callback=self.parse_detail) def parse_detail(self,response): item = SinaNewsItem() item['title'] = response.xpath('//h1[@id="artibodyTitle"]/text()').extract_first().strip() item['publish_time'] = response.xpath("//span[@class='date']/text()").extract_first().strip() item['url'] = response.url yield item ``` 这段脚本实现了两个主要功能:一是从给定的起始页面获取所有指向单篇报道详情页的超链接;二是访问这些链接对应的页面,从中抽取出目标字段填充至之前定义好的 Items 实例中返回给后续管道处理环节[^2]. #### 数据持久化存储 (pipelines.py) 最后一步是要考虑怎样把收集来的资料妥善存档下来。通常做法是在 pipelines.py 文件里面加入自定义 Pipeline 来对接 MongoDB 或其他类型的数据库服务端接口实现这一点: ```python import pymongo class MongoPipeline(object): collection_name = "sina_news" def __init__(self, mongo_uri, mongo_db): self.mongo_uri = mongo_uri self.mongo_db = mongo_db @classmethod def from_crawler(cls, crawler): return cls( mongo_uri=crawler.settings.get('MONGO_URI'), mongo_db=crawler.settings.get('MONGO_DATABASE', 'items') ) def open_spider(self, spider): self.client = pymongo.MongoClient(self.mongo_uri) self.db = self.client[self.mongo_db] def close_spider(self, spider): self.client.close() def process_item(self, item, spider): self.db[self.collection_name].insert_one(dict(item)) return item ``` 以上即为整个流程概述,涵盖了从零开始搭建基于 Scrapy新浪财经新闻采集系统的全过程介绍[^3]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值