天天看點

使用Scrapy對新聞進行爬蟲(零)Scrapy學習筆記

Scrapy學習筆記

目标

使用Scrapy爬蟲架構對擷取網站新聞資料。

爬蟲目标網站:http://tech.163.com

提取内容:

  1. url 新聞位址
  2. source 新聞來源
  3. title 新聞标題
  4. editor 新聞編輯
  5. time 新聞時間
  6. content 新聞正文内容

内容存儲方式:

  1. 檔案
  2. 資料庫

代碼

  1. 爬蟲架構檔案:

結果:

├── 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 結構化内容提取方法實作

結果

使用Scrapy對新聞進行爬蟲(零)Scrapy學習筆記