Scrapy爬取中国日报新闻--( 一 )

本文介绍了如何在Windows上利用Anaconda安装Scrapy,并创建Scrapy工程来爬取中国日报的新闻。文章详细讲解了创建工程、生成爬虫以及Spider文件中的allowed_domains、start_urls和parse函数的使用。此外,还讨论了如何定义Item来存储新闻的标题、作者、发布时间等信息。

1、首先需要安装Scrapy

  但是由于在Windows上Scrapy安装出现了各种问题,要求需要最新版的VS。出于偷懒的心理,推荐下载Anaconda,使用Anaconda来管理Python不仅省力,而且方便。

  下载Scrapy只需要

conda install scrapy

  关于Anaconda下载,如果在官网下载太过慢的话,可以选择在清华的镜像网站进行下载。

2、Scrapy 创建工程

  在Anaconda的命令行中输入

scrapy startproject Tutorial(项目名)

  即可以在当前目录下创建Scrapy工程。此时空工程的目录如下:

Scrapy目录结构

 具体需要用的每一个文件,将在下面进行阐述。

 可以通过 genspider命令来创建一个通用的爬虫

# scrapy genspider 爬虫名 目标网址
scrapy genspider tutorial cn.chinadaily.com.cn

自动生成爬虫

  此时在spiders文件夹下,已经生成了一个名为tutorial的Python文件,这个文件即是我们需要完善的爬虫文件。

3、Spider文件

  打开tutorial.py文件。

# -*- coding: utf-8 -*-
import scrapy


class TutorialSpider(scrapy.Spider):
    name = 'tutorial'
    allowed_domains = ['chinadaily.com.cn'] # 修改了一下
    start_urls = ['cn.chinadaily.com.cn']

    def parse(self, response):
        pass

  可以看到 Scrapy已经自动生成了allowed_domains、start_urls和parse函数。

  • allowed_domains      所允许访问的域名
  • start_urls          爬虫开始的URL
  • parse           对抓取的html页面的解析函数

     
    我们还需要针对所需要爬取的页面,对parse进行override。

抓取的新闻对象 Item

  那么我们想要抓取中国日报上的新闻,我们就需要保存新闻的标题、作者、新闻发布时间、新闻内容、以及新闻的标签等等。
  我们需要是用到items.py。可以将item看成是对象。

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class NewsItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 将item补充完整

    # 新闻标题
    title = scrapy.Field()
    # 作者
    author = scrapy.Field()
    # 新闻来源
    source = scrapy.Field()
    # 新闻发布时间
    pubtime = scrapy.Field()
    # 新闻内容
    content = scrapy.Field()
    # 新闻标签
    tags = scrapy.Field()
    # url
    url = scrapy.Field()

  在Scrapy中所有的数据都会被保存成String类型。
 

要使用Scrapy框架爬取泰迪公司新闻中心的内容,可按以下步骤进行: ### 1. 安装Scrapy 不同操作系统安装Scrapy的方式有所不同: - **Linux**:使用命令 `pip3 install scrapy` 进行安装 [^4]。 - **Windows**: - 执行 `pip3 install wheel`。 - 从 `http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted` 下载 `twisted`。 - 进入下载目录,执行 `pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl`。 - 执行 `pip3 install scrapy`。 - 从 `https://sourceforge.net/projects/pywin32/files/` 下载并安装 `pywin32`。若安装不成功且报错 `error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual`,可直接从 `https://pan.baidu.com/s/1Xd-Zc9rLA0mNNG3aUu7WUA` 下载包安装,提取码为 `arcs` [^4]。 ### 2. 创建Scrapy项目 打开命令行,执行以下命令创建个新的Scrapy项目: ```bash scrapy startproject teddy_news_spider cd teddy_news_spider ``` ### 3. 定义Item 在 `teddy_news_spider/items.py` 文件中定义要爬取的数据结构。可以参考之前的示例,添加对应属性,如新闻的标题、时间、来源等: ```python import scrapy class TeddyNewsItem(scrapy.Item): title = scrapy.Field() time = scrapy.Field() source = scrapy.Field() content = scrapy.Field() ``` ### 4. 创建Spider 在命令行中执行以下命令创建个新的Spider: ```bash scrapy genspider teddy_news news.teddy.com ``` 这里 `teddy_news` 是Spider的名称,`news.teddy.com` 是泰迪公司新闻中心的域名。 然后编辑 `teddy_news_spider/spiders/teddy_news.py` 文件,编写爬取逻辑: ```python import scrapy from teddy_news_spider.items import TeddyNewsItem class TeddyNewsSpider(scrapy.Spider): name = "teddy_news" allowed_domains = ["news.teddy.com"] start_urls = ["https://news.teddy.com"] # 替换为实际的新闻中心URL def parse(self, response): # 定位新闻列表 news_list = response.css('div.news-item') # 根据实际的HTML结构修改选择器 for news in news_list: item = TeddyNewsItem() item['title'] = news.css('h2.news-title::text').get() # 根据实际的HTML结构修改选择器 item['time'] = news.css('span.news-time::text').get() # 根据实际的HTML结构修改选择器 item['source'] = news.css('span.news-source::text').get() # 根据实际的HTML结构修改选择器 # 跟进新闻详情页 news_url = news.css('a.news-link::attr(href)').get() if news_url: news_url = response.urljoin(news_url) yield scrapy.Request(news_url, callback=self.parse_news_detail, meta={'item': item}) def parse_news_detail(self, response): item = response.meta['item'] item['content'] = response.css('div.news-content::text').extract() # 根据实际的HTML结构修改选择器 yield item ``` ### 5. 运行Spider 在命令行中执行以下命令运行Spider: ```bash scrapy crawl teddy_news -o teddy_news.json ``` 这将把爬取到的新闻数据保存到 `teddy_news.json` 文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值