scrapy爬取网易新闻内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scrapy爬取网易新闻内容相关的知识,希望对你有一定的参考价值。

 

最近在写毕业论文,是做个文本分类相关的题目。想抓取网易新闻里那些新闻内容作为分析的数据,于是就又照着scrapy的文档照做了一遍。。。

感觉主要就只是两个文件items.py和spiders文件夹下的爬取规则的文件,我这里爬取技术类文档的直接叫tech.py了

 

scrapy的入门教程已经写的很详细了,大家可以先看看。地址为http://scrapy-chs.readthedocs.org/zh_CN/0.24/intro/tutorial.html

下面是我做的情况

1.创建项目    运行命令

scrapy startproject news

2.定义item

修改了下news文件夹下的items.py内容,添加了article和desc字段分别表示文章地址和内容

import scrapy

class NewsItem(scrapy.Item):
    article = scrapy.Field()
    desc = scrapy.Field()

 

3.编写爬虫spider

在news/spiders目录下,新建了tech.py文件

#coding:utf-8
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.contrib.spiders import CrawlSpider,Rule
from news.items import NewsItem
class TechSpider(CrawlSpider):
   name = "tech"
   allowed_domains = ["tech.163.com"]
   start_urls = ["http://tech.163.com/"]
   rules = [Rule(LinkExtractor(allow=r"/16/03\d+/\d+/*"),‘parse_item‘)]

   def parse_item(self,response):
     sites = response.xpath(‘//div[@class="end-text"]/p‘)
     items = []
     content = []
     for site in sites:
       content.append(‘‘.join(site.xpath(‘text()‘).extract()))
     item = NewsItem()
     item[‘article‘] = response.url
     item[‘desc‘] = ‘‘.join(content)
     items.append(item)
     return items

  

4.爬取数据与保存

我在new文件夹同级目录下新建了个data文件夹,然后运行下面代码
scrapy crawl tech -o tech1603.json

 这样就完成爬取了网易16年3月的一些技术文章,存为一个json了。。。如果想直观的看的话可以通过http://www.bejson.com/查看抓取结果

 

5.然后想爬取下财经类文章

spiders文件夹下新建money.py

#coding:utf-8
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.contrib.spiders import CrawlSpider,Rule
from news.items import NewsItem
class MoneySpider(CrawlSpider):
   name = "money"
   allowed_domains = ["money.163.com"]
   start_urls = ["http://money.163.com/"]
   rules = [Rule(LinkExtractor(allow=r"/16/03\d+/\d+/*"),‘parse_item‘)]

   def parse_item(self,response):
     sites = response.xpath(‘//div[@class="end-text"]/p‘)
     items = []
     content = []
     for site in sites:
       content.append(‘‘.join(site.xpath(‘text()‘).extract()))
     item = NewsItem()
     item[‘article‘] = response.url
     item[‘desc‘] = ‘‘.join(content)
     items.append(item)
     return items

  

到data文件夹下运行

scrapy crawl money -o money1603.json

这样财经类三月的一些文章也下下来了。。。  

 

写在后面的话

  最后爬取的数据有爬了5,6类吧,不过貌似平均就100篇左右,可能是url规则制定的问题,数据太少也没能用上,不过就当是学了下爬数据也算get个新技能吧。

tip:如果要做文本分类的话,搜狗有个文本分类的语料库不错,我最后要用的也是那个http://www.sogou.com/labs/dl/c.html,我下的精简版,各类都是1990篇文章,只是做实验就差不多够了

以上是关于scrapy爬取网易新闻内容的主要内容,如果未能解决你的问题,请参考以下文章

scrapy主动退出爬虫的代码片段(python3)

基于Scrapy框架的Python新闻爬虫

使用scrapy爬虫,爬取今日头条首页推荐新闻(scrapy+selenium+PhantomJS)

Scrapy框架之基于RedisSpider实现的分布式爬虫

利用scrapy抓取网易新闻并将其存储在mongoDB

Scrapy操作浏览器获取网易新闻数据