Scrapy 爬取QQ新闻

scrapy框架是Python爬虫框架中运用的最广的框架,最近闲来无事,研究了一下。因本人爱好军事,所以写了个爬取QQ军事新闻网的爬虫。

本人非常喜欢python 这门语言,python有这丰富的库,安装/卸载库也非常简单
pip install xxx ,卸载 pip uninstall xxx,言归正传。
scrapy 官网网址:
http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html
第一步我们安装一下scrapy:

    pip install scrapy 

scrapy -h 看一下scrapy基本的命令


第二步我们创建一个tutorial项目

    scrapy startproject tutorial

查看一下创建好的目录结构
这里写图片描述
这些文件分别是:
scrapy.cfg: 项目的配置文件
tutorial/: 该项目的python模块。之后您将在此加入代码。
tutorial/items.py: 项目中的item文件.
tutorial/pipelines.py: 项目中的pipelines文件.
tutorial/settings.py: 项目的设置文件.
tutorial/spiders/: 放置spider代码的目录.


第三步我们在tutorial/items.py添加如下内容:
```

    import scrapy
    from scrapy.item import Item, Field
    class QQNews(scrapy.Item):
        title = Field()
        content = Field()

```
Item 是保存爬取到的数据的容器;其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。简单点就是我们存储爬取到的数据的字段。


第四步,我们编写爬虫脚本
vim tutorial/spiders/qqNewsSpider.py


# -*-coding: utf-8 -*-  
#author:Smile
#data:2018-01-10
#description:this program just to get qq news,we'll get the news title and content
import sys, os  
reload(sys) 

from scrapy.spider import Spider  
from tutorial.items import QQNews
from scrapy.http import Request
from scrapy.selector import Selector

class QQNewsSpider(Spider):
    name = 'qq_news'
    allow_domain = 'http://new.qq.com/'
    start_urls= ["http://mil.qq.com/mil_index.htm"]

    def parse(self,response):
        news_urls = Selector(response)
        for start_url in news_urls.xpath('//a[@class=\"pic\"]/@href').extract():
            yield Request(url="http:"+start_url,callback=self.second_parse) 

    def second_parse(self,response):
        detail_sel = Selector(response)
        content = ""
        item = QQNews()
        item['title'] =  detail_sel.xpath('//div[@class=\"LEFT\"]/h1/text()').extract()
        item['content'] = ''.join(detail_sel.xpath('//div[@class=\"content-article\"]/p/text()').extract())

        yield item

第五步对数据进行处理,我是直接写txt文档的
修改 tutorial/pipelines.py


from scrapy import signals  
import json  
import codecs  
import sys  
reload(sys)  
sys.setdefaultencoding("utf-8")

class QQNewsPipeline(object):
    def process_item(self, item, spider):
        if not item['title']:
            return item
        file_name = item['title'][0] + ".txt"
        fp = open("/Users/admin/Desktop/data/"+file_name, 'w')  
        fp.write(item['content'])  
        fp.close()

        return item

第六步,修改配置文件


    BOT_NAME = 'tutorial'
    SPIDER_MODULES = ['tutorial.spiders']
    NEWSPIDER_MODULE = 'tutorial.spiders'
    LOG_LEVEL = 'INFO' 
    ROBOTSTXT_OBEY = True

最后一步,也是最牛逼的一步运行脚本

    scrapy crawl qq_news

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值