微信新闻爬虫订阅号设计

github地址:https://github.com/moyangvip/newsWeChat

1、功能:

  实现网站新闻定时爬取,并在订阅号端呈现。

  后台通过scrapy定期抓取网站信息信息,并通过BosonNLP取摘要,最终整理信息存入DB。微信服务程序从DB中读取新闻信息, 并通过 memcached 缓存用户状态。

  实际使用: 进入订阅号后 1、请输入"新闻"获取所有站点的最新新闻列表; 2、请输入具体网站名(如"猎云网")获取该站点最新新闻列表; 3、输入具体新闻编号获得详细资讯。

截图:

  

2.系统整体架构设计

系统架构图(红色字体表示待实现功能)

  1. Craw爬虫(/opt/MT/MtCrawler目录):采用scrapy爬虫框架。爬取网站url、标题、内容等信息,并调用bosonnlp进行数据处理获取摘要,最终将爬取的url、标题、摘要等信息存入DB
  2. Bosonnlp(/opt/MT\BosonNLP目录):利用Bosonnlp的python API二次开发,提取出网页摘要信息,并返回数据
  3. 定时脚本:通过linux自带的crontab配置,每天定时启动/opt/MT/MtCrawler/start.sh脚本爬取网站最新数据,可通过输入:crontab –e查看
  4. Mysql:主要用于存储爬取的网站新闻信息,同时也存储微信服务器的一些配置信息。具体可参考/opt/MT/MT_DB.sql文件
  5. Memcached:缓存用户的临时状态信息(1分钟有效期),场景:每次用户输入“信息”后,服务器都会通过Memcached记录当前场景下该用户输入“新闻”的次数。微信服务器通过该值进行新闻列表的分页管理。
  6. 微信后台服务:接收用户输入消息,判断消息类型,并根据当前消息类型及Memcached中保存的用户状态,查询DB返回具体回复信息

3.微信后台服务程序架构设计

3.1 简介

微信后台服务程序采用python作为开发语言,以web.py作为网络框架,运行依赖:

  1. python2.7版本以上
  2. 安装web.py
  3. 安装libxml2, libxslt, lxml python
  4. 安装python-dev ,MySQL-python
  5. 安装 python-memcached

在120.25.205.102地址的云服务器中,以上依赖均已经安装。

参考文档:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5&token=&lang=zh_CN 微信订阅号开发入门指引

https://mp.weixin.qq.com/wiki  微信开发者文档

《web.py中文教程.docx》

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000  Python 2.7教程

3.2微信服务器整体流程

1、 用户在订阅号界面发送消息信息;

2、 该消息将会被发送到微信公众平台后台,微信公众后台将该消息格式化为接收普通文本消息标准格式(参考

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453&token=&lang=zh_CN  开发者接口文档),并通过http请求的post方式将封装好的消息数据发送给指定的 Linux服务器机器中的80端口的微信后台服务程序;

3、 微信后台服务程序对http请求的数据进行解析,获得发送用户的id、用户发送的内容等数据;

4、 微信后台服务程序根据解析到的数据,根据实际业务逻辑进行处理;

5、 微信后台服务程序根据《开发者接口文档》(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543&token=&lang=zh_CN),将待返回给用户的内容格式化为回复用户消息标准格式,并返回给http请求方:微信公众平台后台

6、 微信公众平台后台解析返回的请求数据,并将实际返回内容回复给用户;

7、 用户收到订阅号的回复消息。

3.3业务逻辑流程

主要业务逻辑代码在/opt/MT/WeChat/handle.py和msgManager.py中。

3.4.主要代码文件介绍

Main.py

根据web.py框架配置的服务入口,服务程序将会在后台一直运行,当收到发送给120.25.205.102/wx的请求时,将会把请求转发给handle.py文件中创建的对象。该文件不建议修改。

handle.py

接收到请求消息后的核心处理类,接收到http的post方式请求后,将会按照POST方法中定义的流程对请求消息进行实际处理。

receive.py

根据微信开发者文档,用户请求的信息都将会被封装为xml格式发送给后台服务程序,receive.py用于解析请求中的xml消息,并获得具体数据信息

reply.py

根据微信开发者文档,后台服务程序处理后的待发送消息需要格式化为标准的xml格式,才能被微信开发者后台识别。reply.py用于将待发送的消息格式为标准形式。

msgManger.py

根据用户发送的消息内容,生成具体的回复内容,可在此次实现具体业务逻辑。当前已经实现关键字匹配返回内容形式和随机权值返回内容。

usrInfo.py

保存用户相关信息,并提供查询修改memcached获取该用户新闻状态信息的接口

timer.py

定制定时事件,可以用于每天主动推送服务内容,当前由于订阅号权限不够,该文件模块尚未用到。

dailySend.py

用于每日主动推送服务内容的管理,由于当前订阅号权限不够,该文件模块尚未用到。

restartServer.sh

启动/重启微信后台服务器的脚本文件,强制退出原服务,并重启新服务

3.5启动方式

最简单的启动方式为进入/opt/MT/WeChat/目录,输入python ./main.py 80即可。

但是此种方式启动存在一定弊端:

1、 原来在后台运行的该微信服务器程序已经关闭;

2、 Memcached服务必须打开;

3、 该程序属于该终端,当该终端被关闭后,这个服务程序就会退出运行,导致微信该订阅号无法提供服务。

正常情况下可以通过/opt/MT/WeChat/目录下的weChatServer.sh脚本启动,默认输入 ./weChatServer.sh 将会出现帮助信息:

如果刚修改完代码,想测试代码能否跑通,可以输入./weChatServer.sh hStart用于调试。此时程序将在前台运行,且将日志信息直接输出到终端。如果希望强制关闭服务,可以按ctrl+c强制退出;

如果测试没有问题,可以输入./weChatServer.sh start,此时服务将会在后台正式部署,一旦正式部署,服务将无法在该终端直接退出。

如果希望将在后台部署的服务关闭,输入./weChatServer.sh end即可。

4.  爬虫后台程序架构设计

4.1简介

爬虫后台程序使用python语言进行开发,使用了scrapy作为框架,目前运行依赖:

  1. python2.7版本以上
  2. 安装scrapy
  3. 安装web.py
  4. 安装python-dev ,MySQL-python

同时爬虫程序将会调用/opt/MT/BosonNLP/summary.py文件,该文件需要安装bosonnlp.py

参考文档:《Scrapy 0.24.6 文档

http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html

4.2业务逻辑流程

主要业务逻辑代码在/opt/MT/MtCrawler/mtCrawler/spiders/dnyct_spider.py和handle.py中。

4.3主要代码文件介绍

/opt/MT/MtCrawler/start.py:

实际crawler框架的启动程序,在该目录执行python ./start.py即可启动。Crawler启动后将会在当前目录的mtCrawler/spiders子目录下寻找dnyct_spider文件

/opt/MT/MtCrawler/start.sh:

将启动程序start.py进行了脚本封装,正常情况下执行./start.sh同样可以启动爬虫程序。

/opt/MT/MtCrawler/mtCrawler/settings.py:

Crawler框架的配置文件,不建议修改

/opt/MT/MtCrawler/mtCrawler/文件夹下的其他文件:

不用管,没用到

/opt/MT/MtCrawler/mtCrawler/spiders/dnyct_spider.py:

抓取猎云网东南亚版块的核心。继承于scrapy框架的scrapy.Spider类和我封装的接口MySpider类。从设置的起始网站爬取指定格式的url,作为目标新闻网页,再去爬取这些目标新闻网页的具体内容,爬取完数据后交给handle进行处理

/opt/MT/MtCrawler/mtCrawler/spiders/mySpider.py:

定义了一些公共接口,并被dnyct_spider类实现。以后开发新的网页爬虫,只需继承并实现这个类的接口即可。

/opt/MT/MtCrawler/mtCrawler/spiders/handle.py:

定义了爬取的数据的处理流程,过滤文字内容,调用实现的Summary库获取摘要,并最终将数据存入DB。

4.4启动方式

直接启动一次该爬虫程序进行抓取数据,只需在/opt/MT/MtCrawler目录中执行./start.sh脚本即可。

当前程序在linux中通过crontab配置了定时任务,将由系统在每天早晨8点、12点、晚上6点自动执行./start.sh脚本来拉取最新的新闻数据。查看配置的定时任务,可以在终端输入crontab –e,其中* 8,12,18 * * * /opt/MT/MtCrawler/start.sh即为配置的爬虫定时启动任务。

5. 其它模块设计

5.1BosonNLP模块设计

目前主要采用了Bosonnlp提供的python API实现了摘要处理。

依赖:

  1. http://bosonnlp.com/注册开发者。获取API密钥
  2. 安装bosonnlp的python支持库:pip install bosonnlp

参考《Bosonnlp开发文档》

http://docs.bosonnlp.com/tutorial_index.html

/opt/MT/BosonNLP/summary.py:

直接调用bosonnlp库中的生成摘要接口。该python文件将会被爬虫程序的handle.py中被调用。

5.2 Memcached模块设计

Memcached为内存缓存服务。可以将键值对数据(key,value)存入memcached中,并设置超时时间。在超时时间内,可以通过键(key)获取到对应的值(value)信息。

安装方式:

sudo apt-get install memcached

启动方式(无需主动启动):

memcached -d -m 128 -p 11333 -u root

默认通过微信后台服务程序的启动脚本启动。请参考5.5节内容。

在微信后台服务器程序中usrInfo.py将会调用memcached的服务。通过memcached临时存储某个用户请求某个新闻类型的次数,保存1分钟。

键(key)为:MT_ + 用户id + _ + 新闻类型

值(value)为:一分钟内的请求次数

具体使用实现可以参考/opt/MT/WeChat/usrInfo.py。以及msgManger.py中的NewsManager

6. 数据库设计

6.1 简介

数据库采用mysql。

表的创建脚本位于

/opt/MT/MT_DB.sql中,可进入查看具体的表信息。

6.2 表结构介绍

6.2.1 ContentInfo表

用于储存匹配不到关键字后根据权值随机返回的消息内容。修改表后需要重启微信后台服务程序才能生效


字段名


类型


说明


其它


id


int(5)


标识id


从1开始自增长


contentMsg


varchar(255)


实际消息内容


每条消息内容必须唯一,不能插入相同的消息内容


weight


int unsigned


权值


权值越高返回的几率越大


valid


int(1)


是否使用


1为使用;0为失效。

默认为1


updateTime


timestamp


修改时间


每次被修改会自动更新

6.2.2 KeyInfo表

用于储存可以被匹配的关键字以及对应返回的内容。修改表后需要重启微信后台服务程序才能生效。


字段名


类型


说明


其它


id


int(5)


标识id


从1开始自增长


keyWord


varchar(100)


关键字


每个关键字内容必须唯一,不能插入相同关键字


contentMsg


text


实际回复内容


valid


int(1)


是否使用


1为使用;0为失效。

默认为1


updateTime


timestamp


修改时间


每次被修改会自动更新

6.2.3 NewsInfo表

用于储存爬取到的新闻内容。修改后即时生效,无需重启。


字段名


类型


说明


其它


id


int(5)


标识id


从1开始自增长,做为该新闻的编号


webName


varchar(20)


网站名


如“猎云网”


sectionName


varchar(20)


版块名


如“东南亚创投版块”


newsUrl


varchar(255)


链接地址


newsTitle


varchar(255)


标题


每个新闻的标题内容必须唯一,无法插入相同标题的新闻


newsSummary


text


摘要内容


valid


int(1)


是否使用


1为使用;0为失效。

默认为1


updateTime


timestamp


修改时间


每次被修改会自动更新

时间: 2024-10-14 05:50:43

微信新闻爬虫订阅号设计的相关文章

多客服功能终于也向所有微信认证的订阅号开放了

多客服功能支持多人同时为一个公众号提供客服服务,经过半年多仅对认证服务号开放后,现在终于也向所有微信认证的订阅号开放了,所有微信认证的服务号和订阅号可以在“功能”-“添加功能插件”页申请开通多客服功能.开通成功后,在“功能”-“多客服”页,可使用多客服功能. 认证公众号的开发者可使用多客服相关接口,完成定制化客服功能开发 消息转发到多客服 如果公众号处于开发模式,普通微信用户向公众号发消息时,微信服务器会先将消息POST到开发者填写的url上,如果希望将消息转发到多客服系统, 则需要开发者在响应

企业微信公众平台订阅号运营11大技巧

1.理解订阅号和服务号的区别 企业订阅号可以每天发一条信息,服务号只能一个月发一条信息,对于一般小企业来讲,用服务号一般不现实,因为你一个月发一次信息,客户可能早把你忘记了,当然也要看你具体需求,因为服务号提供的功能比订阅号更强大,如服务号可以申请自定义菜单. 2.微信对企业有什么帮助? 微信营销本质是互动,传递价值,维护老客户,影响新客户,很多企业把微信当成宣传工具,每天广告准时发送,这样微信号是没有生命力的. 3.利用好信息中“阅读原文” 这个是很容易很忽略掉细节,大家都知道微信信息中没有办

微信企业号、订阅号、服务号之间有什么区别和不同

微信企业号.订阅号.服务号之间有什么区别和不同 随着微信推出企业号后,很多人开始对微信公众平台的订阅号.服务号和企业号犯迷糊,搞不清楚这三个号的区别了: 订阅号: 面向人群: 面向媒体和个人提供一种信息传播方式. 消息显示方式: 折叠在订阅号目录中. 消息次数限制: 每天群发一条. 验证关注者身份: 任何微信用户扫码即可关注. 消息保密: 消息可转发.分享. 高级接口权限: 不支持 定制应用: 不支持,新增服务号需要重新关注. 服务号: 面向人群: 面向企业,政府或组织,用以对用户进行服务. 消

啊Ran讲微信开发(.net) :订阅号+自定义服务器(URL接入,文本消息处理)

本篇主要围绕的是自定义Web服务器的架构搭建. 在上篇中"开发者中心"留下了两个词"URL"和"Token",URL指的是能够接收处理微信服务器发送的GET/POST请求的网址,该网址应该已部署到开发这的WEB服务器中,能被公网访问得到.Token是用作微信服务器与开发者Web服务器之间进行通信的安全签名,每次微信服务器和开发者Web服务器的通信都会含有该Token值经过加密后的信息,通过对比Token值,验证通信的安全性.Token用于防止未授

第三方平台也能为未微信认证的订阅号调用自定义菜单接口和素材管理接口

3月20号已认证微信公众号可通过第三方平台管理微信公众平台素材,现在自定义菜单接口和素材管理接口向第三方平台旗下未认证订阅号开放,未认证订阅号也可以授权给第三方平台,让第三方平台开发者帮助实现自定义菜单和素材管理业务.但请注意,为了避免接口安全风险,公众号自身仍旧没有上述接口权限,无法调用这些接口. 未认证订阅号的自定义菜单接口能力,与公众平台官网内能力是相同的,具体如下: 1. 点击菜单后,公众号回复一条消息,支持图文消息.图片.语音.视频类型,不支持文本消息: 2. 点击菜单后,跳转到公众号

微信开发系列教程:(1)订阅号和服务号深入分析

微信开发系列教程,将以一个实际的微信平台项目为案例,深入浅出的讲解微信开发.应用各环节的实现方案和技术细节. 原创内容,欢迎转载,转载请注明出处. 首先在第1章节中,我们先理清什么是订阅号,什么又是服务号,以及两者的关键性区别. 订阅号和服务号统称为微信公众号. 订阅号强调媒体资讯属性,为会员提供信息订阅,适用于新闻传媒类企业.订阅号从某种意义上来讲,是拿来做内容的,如果你没有原创作品,对用户没有任何意义. 服务号强调服务和应用属性,旨在为会员提供服务并与之互动.支持所有微信高级接口,几乎所有的

微信公众平台服务号与订阅号区别详解【有图】

微信公众平台现在分为两个类别的号:一个是服务号,一个订阅号.服务号是针对企业的,订阅号是针对个人的.这个两种类型的号有很大的区别,特别是功能上有所不同. 工具/原料 电脑.微信公众平台 微信公众平台服务号与订阅号"首页"区别 1 微信公众平台服务号首页面:主要的标志是:服务号 其他的和订阅号一样.如下图所示: 2 微信公众平台订阅号首页面:主要的标志是:订阅号 其他的和服务号一样.如下图所示: 3 微信公众平台服务号与订阅号进入的首页界面是一样的,主要的区别就是标志不一样,明确指出所登

微信公众平台企业订阅号注册流程

1. 浏览器打开https://mp.weixin.qq.com/ 点击右上角“立即注册” 要求输入注册的email:是***公司微信平台负责人的公司email邮箱 2. 该注册的邮箱里会立即收到一封激活邮件: 点击激活邮件里地址,进行信息登记: 手机号码:***公司微信平台负责人的手机号码 身份证一份:***公司微信平台负责人的身份证 运营者手持证件照片一份: ***公司微信平台负责人的手持证件照片 营业执照一份:***公司营业执照清晰彩色原件扫描件或数码照 组织机构代码 企业邮箱: ***公

微信公众号订阅号和服务号有什么区别?

微信公众号是企业做好微营销必备,对于公众号的认识,许多人都是模糊不清,在申请微信公众号的时候,都会问到一个问题"微信公众号平台,企业是注册订阅号还是服务号比较好?",如果没有认真了解过订阅号与服务号的定义,是不知道注册哪个才合适的,今天就给大家说明一下订阅号和服务号的定义和区别,以便大家能做出合理的选择. 订阅号和服务号的主要区别为: 1.服务号和订阅号都是公众号的一种.订阅号的主要功能是每天可以群发信息;而服务号可以用于搭建支付和交易平台. 2.服务号主要偏于服务交互,认证前后都是每