新闻订阅及新闻内容展示系统(Python+Django+scrapy)

目录
摘 要 1
Abstract 2
第一章 引言 3
1.1 项目的背景和意义 3
1.2.1 个性化新闻服务现状 4
1.2.2 网络爬虫研究现状 4
1.2.3 项目的范围和预期结果 4
第二章 技术与原理 5
2.1 技术选型 5
2.2 相关原理介绍 7
第三章 系统需求分析 10
3. 1 新闻订阅系统用例析取 10
3.2 新闻订阅系统用例规约 10
第四章 新闻采集与订阅系统的设计 15
4.1 系统架构及原理 15
4.2 系统模块设计 17
第五章 新闻采集与订阅系统的实现 23
5.1 系统框架实现 23
5.2 爬虫采集模块实现 27
5.3 防反爬虫模块实现 28
5.4 爬虫存储模块实现 29
5.5 消息推送模块实现 30
5.6 消息订阅与展示模块实现 32
第六章 系统部署 39
第七章 总结与展望 42
7.1 总结 42
参考文献 44
致谢 45
本文描述了基于网络爬虫的新闻订阅系统的设计与实现的过程,主要工作如下:
编写一个网络爬虫,使其能够对网络中指定站点的新闻进行自动收集并存入数据库; 数据的去重和网络爬虫的反爬虫策略应对;
提供一个新闻展示页面,把爬取到的新闻展示给用户;
提供新闻订阅页面,用户可以在页面输入指定订阅的关键词; 编写微信推送服务,把用户订阅的新闻通过微信推送给用户;
本新闻采集与订阅系统的爬虫部分框架是利用Scrapy自带的命令行工具来初始化,初始化后已经创建好了Scrapy引 擎所需的几个重要的文件,如中间件,数据管道,配置文件等,这样做的好处是能够快速搭建起框架,并且能够达 到官方定义的最佳实践。接下来我们可以在这个目录下定义自己的一些模块文件,再在这些文件中实现自己的处理 函数就可以了,最终实现的爬虫部分的目录结构如图5.1所示,其中items.py是用于定义数据储存模型的文件,middlewares.py是用于定义中间件的文件,pipelines.py是用于定义数据管道的文件,settings.py是本系统爬虫部分的配置内容,spiders文件夹中存放了不同爬虫的网络蜘蛛代码, utils.py则是一些通用的函数存放的地方,wechat_config.py和wechatpush.py分别是微信推送部分的配置和推送代码。
消息订阅与展示模块主要由前端静态文件部分和后端API部分组成。在开发方式上本系统选择了使用前后端分离的方式,本文转载自http://www.biyezuopin.vip/onews.asp?id=13348前端通过AJAX的方式来跟后端提供的API进行交互,后端API服务器收到请求后返回对应的JSON格式的数据给前端,前端根据数据来渲染出最终展示给用户的页面,这种前后端分离的方式有效地降低了代码之间的Wi合度。在前端实现方面,使用了jquery来对DOM元素进行操作以及进行异步请求等,另外使用了WeUI的样式库,WeUI 是一套提供同微信原生一致的视觉体验的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一。

-*- coding: utf-8 -*-

Define your item pipelines here
#
Don't forget to add your pipeline to the ITEM_PIPELINES setting
See: http:
import pymongo
import logging
from utils import redis_conn, redis_url_key
from scrapy.conf import settings
from scrapy.exceptions import DropItem
from wechat_push import send_msg
from wechat_config import default_openid
logger = logging.getLogger(__name__)

class MongoDBPipeline(object):

    def __init__(self):
        conn = pymongo.Connection(
            settings['MONGO_CONF']['host'],
            settings['MONGO_CONF']['port']
        )
        db = conn[settings['MONGO_CONF']['db']]
        self.news_collection = db[settings['MONGO_CONF']['collection']]

    def process_item(self, item, spider):
        valid = True
        for data in item:
            if not data:
                valid = False
                raise DropItem("Missing {0}!".format(data))
        if valid:
            object_id = self.news_collection.insert(dict(item))
            spider.object_id = str(object_id)
            logger.info("Question added to MongoDB database!")
        return item

class RedisPipeline(object):

    def process_item(self, item, spider):
        redis_conn.hset(redis_url_key, item['url'], 0)
        return item

class PushPipeline(object):

    def __init__(self):
        conn = pymongo.Connection(
            settings['MONGO_CONF']['host'],
            settings['MONGO_CONF']['port']
        )
        db = conn[settings['MONGO_CONF']['db']]
        self.subscription_collection = db[settings['MONGO_CONF']['subscription_collection']]

    def process_item(self, item, spider):
        subscription = self.subscription_collection.find_one(
            {
                'open_id': default_openid
            }
        )
        keywords = subscription.get('keywords', [])
        # 判断关键词
        keyword_in_title = any([keyword in item['title'] for keyword in keywords])
        keyword_in_content = any([keyword in item['content'] for keyword in keywords])
        if keyword_in_title or keyword_in_content:
            send_msg(
                title=item['title'],
                data=item['content'],
                object_id=spider.object_id,
                openid=default_openid
            )
        return item

新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)
新闻订阅及新闻内容展示系统(Python+Django+scrapy)

Original: https://blog.csdn.net/newlw/article/details/127382573
Author: biyezuopinvip
Title: 新闻订阅及新闻内容展示系统(Python+Django+scrapy)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/790205/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球