爬取英语文章推送

背景:妹子最近要复习英语,想找些英语故事~~~~~~

--------------------------------------------------------------------------------

项目描述:

爬取英语阅读网(http://www.enread.com/)中的英语故事、英语笑话栏目(其他几个栏目组织结构都类似),每天选取一篇推送到妹子手机上。

==============================================

1.爬取文章

比如英语故事:

分为几个栏目




根据正则可以将每个类目都筛选出来

cateRex = 'class="title"><a href="(.*?)">(.*?)</a></div>'	
pattern = re.compile(cateRex,re.S)
items = re.findall(pattern,html)
//items [<url->categoryname>,.....]


获取到每一个类目的url后,可以分别爬取每一个url,可以获取到对应的文章列表页



文章列表页,同理,可以针对类似的正则将每一个文章的题目和每一个文章的连接获取到,然后接着继续爬取每一个文章的具体正文。

2.数据入库

将爬取到的文章插入到Mysql数据库中

设计表:

文章具体信息表

CREATE TABLE `spider_english` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `categoryname` varchar(255) DEFAULT NULL COMMENT '文章类目',
  `categoryurl` varchar(255) DEFAULT NULL COMMENT '文章类目url',
  `articname` varchar(255) DEFAULT NULL COMMENT '文章题目',
  `articurl` varchar(255) DEFAULT NULL COMMENT '文章url',
  `artic` text COMMENT '文章',
  `isread` int(2) DEFAULT NULL COMMENT '1为已推送,0为未推送',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=187 DEFAULT CHARSET=utf8;

推送相关信息


CREATE TABLE `spider_english_history` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `artic` text,
  `number` int(11) DEFAULT NULL COMMENT '推送次数',
  `date` varchar(255) DEFAULT NULL COMMENT '文章推送日期',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;


3.文章推送

读取数据库中未推送的文章信息,推送,并且将isread置为1,插入推送历史信息表。


推送的方式为:短信推送+邮箱推送。

普通的发短信的推送是需要付费的,可以向139邮箱发送邮件,中国移动会自动发送短信~~~但是一般正文不会全部显示。

这里采用发短信提示邮箱有邮件,然后阅读邮件



最终成果如下:





4.核心代码:

#获取页面的html
def getHtml(url,header):
    request = urllib.request.Request(url,headers=header)
    response = urllib.request.urlopen(request)
    page = response.read().decode('gbk')
    return page


#获取故事的所有分类
def getCategory(html,rex):
    pattern = re.compile(rex,re.S)
    items = re.findall(pattern,html)
    res = []
    for item in items:
        dict ={}
        dict[item[0]] = item[1] # url -> name
        res.append(dict)
    return res


#获取故事的文章
def getArtic(html):
    pattern = re.compile('dede_content">.*?<div>(.*?)</div> <br> <div class="dede_pages">',re.S)
    items = re.findall(pattern,html)
    return items



发送邮件程序可以参考:http://www.runoob.com/python/python-email.html

5.定时任务

可以直接放到linux上,设置crontab
windows下可设置任务执行计划,参考:http://blog.csdn.net/wwy11/article/details/51100432

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值