使用Scrapy对新闻进行爬虫(零)

Scrapy学习笔记

目标

使用Scrapy爬虫框架对获取网站新闻数据。

爬虫目标网站:http://tech.163.com

提取内容:

  1. url 新闻地址
  2. source 新闻来源
  3. title 新闻标题
  4. editor 新闻编辑
  5. time 新闻时间
  6. content 新闻正文内容

内容存储方式:

  1. 文件
  2. 数据库

代码

  1. 爬虫框架文件:
scrapy startproject NewsSpiderMan  // 创建代码

结果:
├── NewsSpiderMan
│ ├── DmozSpider // 自建目录,存放针对DOMZ网站的爬虫类
│ │ ├── init.py
│ │ └── dmoz_spider.py
│ ├── NewsSpider // 自建目录,存放针对新闻的爬虫类
│ │ ├── NewsSpider.py
│ │ ├── NewsSpider.pyc
│ │ ├── init.py
│ │ └── init.pyc
│ ├── init.py
│ ├── init.pyc
│ ├── items.py // 爬虫提取内容设定
│ ├── items.pyc
│ ├── pipelines.py // 爬到数据后使用ITEM PIPELINE过滤处理数据并存放
│ ├── pipelines.pyc
│ ├── settings.py // 爬虫框架下配置
│ └── settings.pyc
├── README.md
├── news.txt // 爬虫结果
└── scrapy.cfg

GITHUB: https://github.com/chenxilinsidney/ScrapyNews

运行方式:scrapy crawl news163spider

爬虫类

#!/usr/bin/env python
# -*-encoding:UTF-8-*-

from NewsSpiderMan.items import NewsItem
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor


class NewsSpider(CrawlSpider):
    name = "news163spider"
    allowed_domains = ["tech.163.com"]
    start_urls = ["http://tech.163.com"]

    rules = [
        Rule(LinkExtractor(allow='tech.163.com/16/.*\.html'),
             follow=True, callback='parse_item')
    ]

    def parse_item(self, response):
        item = NewsItem()
        item['url'] = [response.url]
        item['source'] =\
            response.xpath('//a[@id="ne_article_source"]/text()').\
            extract()
        item['title'] =\
            response.xpath('//div[@class="post_content_main"]/h1/text()').\
            extract()
        item['editor'] =\
            response.xpath('//span[@class="ep-editor"]/text()').\
            extract()
        item['time'] =\
            response.xpath('//div[@class="post_time_source"]/text()').\
            extract()
        item['content'] =\
            response.xpath('//div[@class="post_text"]/p/text()').\
            extract()
        for key in item:
            for data in item[key]:
                self.logger.debug("item %s value %s" % (key, data))
        return item

    # def parse_start_url(self, response):
    #    log.start()
    #    log.msg(str(response.xpath('//a/@href')))
    #    return response.xpath('//a/@href')

关键点:
1. name 标识一个爬虫,框架调用时使用(如命令:scrapy crawl news163spider)
2. start_urls 初始爬虫目标网站
3. Rule 爬虫规则
4. parse_item 结构化内容提取方法实现

结果

新闻数据举例

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值