依赖包:

1.pymongo

2.jieba

# -*- coding: utf-8 -*-

"""

@author: jiangfuqiang

"""

from HTMLParser import HTMLParser

import urllib2

import sys

import pymongo

import time

import jieba

import traceback



default_encoding = 'utf-8'

if sys.getdefaultencoding() != default_encoding:

    reload(sys)

    sys.setdefaultencoding(default_encoding)

class FetchJobble(HTMLParser):



    def __init__(self):

        HTMLParser.__init__(self)

        self.isPostThumb = False

        self.isPostMeta = False

        self.isMetaTitle = False

        self.isCategoryTag = False

        self.isComment = False

        self.isexcerpt = False

        self.isReadMore = False

        self.isPicture = False

        self.data = {}

        self.result = []



    def handle_starttag(self,tag,attrs):

        if tag == 'div':

            for key,value in attrs:

                if key == 'class':

                    if value == 'post-thumb':

                        self.isPostThumb = True

                    elif value == 'meta-title':

                        self.isMetaTitle = True

        elif tag == 'a' and self.isPostThumb == True:



            for key, value in attrs:

                if self.isReadMore:

                    if key == 'href':

                        self.data['redmoreLink'] = value

                        self.data['keyword'] = ",".join(jieba.cut(self.data['title']))

                        self.result.append(self.data)

                        self.isPostThumb = False

                        self.isMetaTitle = False

                        self.isReadMore = False

                        self.isCategoryTag = False

                        self.isComment = False

                        self.isexcerpt = False

                        self.isPicture = False



                        self.data = {}

                else:

                    if key == 'class':

                        if value == 'meta-title':

                            self.isMetaTitle = True

                    elif key == 'rel':

                        if value == 'category tag':

                            self.isCategoryTag = True

                    elif key =='href':

                        if value.find('#respond') > 0:

                            self.isComment = True

        elif tag == 'span' and self.isComment == True:

            for key, value in attrs:

                if key == 'class' and value == 'excerpt':

                    self.isexcerpt = True

                elif key == 'class' and value == 'read-more':

                    self.isReadMore = True

        elif tag == 'img' and self.isPostThumb and self.isPostMeta == False:

            for key, value in attrs:

                if key == 'src':

                    self.data['imgSrc'] = value



    def handle_endtag(self,tag):



        pass



    def handle_data(self,data):

         if self.isMetaTitle:

            self.data['title'] = data

            self.isMetaTitle = False

         elif self.isCategoryTag:

             ct = ''

             if 'tag' in self.data.keys() :

                 ct = self.data['tag'] + "," + data

             else:

                 ct = data

             self.data['tag'] = ct

             self.isCategoryTag = False

         elif self.isComment and 'comment' not in self.data.keys():

             self.data['comment'] = data.split(" ")[0]

         elif self.isexcerpt:

             self.data['desc'] = data

             self.isexcerpt = False





    def getResult(self):

        return self.result



if __name__ == "__main__":

    con = pymongo.Connection('localhost', 27017)

    db = con.blog

  

    fetchblog = db.fetch_blog



    url = "http://blog.jobbole.com/all-posts/page/%d"

    count = 1

    flag = False

    headers={

             'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}

    while flag == False:

        try:

            req = urllib2.Request(url%count,headers=headers)

            request = urllib2.urlopen(req)

            data = request.read()

            fj = FetchJobble()

            fj.feed(data)

            result = fj.getResult()

            if len(result) < 1:

                flag = True

            else:

                for doc in result:

                    fetchblog.insert(doc)

                print "page is %d"%count

                count += 1



                time.sleep(5)

        except Exception, e:

            traceback.print_exc()

            print "parse error",e

python抓取伯乐在线的全部文章,对标题分词后存入mongodb中的更多相关文章

  1. Scrapy爬取伯乐在线的所有文章

    本篇文章将从搭建虚拟环境开始,爬取伯乐在线上的所有文章的数据. 搭建虚拟环境之前需要配置环境变量,该环境变量的变量值为虚拟环境的存放目录 1. 配置环境变量 2.创建虚拟环境 用mkvirtualen ...

  2. python爬取博客圆首页文章链接+标题

    新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...

  3. Python抓取豆瓣《白夜追凶》的评论并且分词

    最近网剧<白夜追凶>在很多朋友的推荐下,开启了追剧模式,自从琅琊榜过后没有看过国产剧了,此剧确实是良心剧呀!一直追下去,十一最后两天闲来无事就抓取豆瓣的评论看一下 相关代码提交到githu ...

  4. python爬虫scrapy框架——爬取伯乐在线网站文章

    一.前言  1. scrapy依赖包: 二.创建工程 1. 创建scrapy工程: scrapy staratproject ArticleSpider 2. 开始(创建)新的爬虫: cd Artic ...

  5. 爬虫实战——Scrapy爬取伯乐在线所有文章

    Scrapy简单介绍及爬取伯乐在线所有文章 一.简说安装相关环境及依赖包 1.安装Python(2或3都行,我这里用的是3) 2.虚拟环境搭建: 依赖包:virtualenv,virtualenvwr ...

  6. python抓取月光博客的全部文章而且依照标题分词存入mongodb中

    猛击这里:python抓取月光博客的全部文章

  7. 使用python抓取CSDN关注人的全部公布的文章

    # -*- coding: utf-8 -*- """ @author: jiangfuqiang """ import re import ...

  8. Python实现抓取CSDN博客首页文章列表

    1.使用工具: Python3.5 BeautifulSoup 2.抓取网站: csdn首页文章列表 http://blog.csdn.net/ 3.分析网站文章列表代码: 4.实现抓取代码: __a ...

  9. python抓取头条文章

    python抓取头条美文并存储到mongodb # Author:song from multiprocessing import Pool from urllib.parse import urle ...

随机推荐

  1. php discuz框架接口不能正常访问的问题

    本人php小白,无php编程基础,直接上php服务器部署,后果很严重.....所以务必看完请给”顶“给评论,以表示对小白的鼓励和赞赏! 关于discuz框架,独自加班,废寝忘食,然已无力吐槽..... ...

  2. Sencha touch navigation 内嵌list,itemTap第二次点击不跳转的问题

    情景:navigation view 内嵌list,第一次触发list事件itemtap,正常跳转至详情页,点击"defaultBackButton"返回至list正常;再次点击触 ...

  3. js实现对数据库的增删查改

    1.查询 复制代码 代码如下: <HTML> <HEAD> <TITLE>数据查询</TITLE> <Script > var conn = ...

  4. linux tmp75 /dev/i2c-* 获取数据 demo

    /********************************************************************** * linux tmp75 /dev/i2c-* 获取数 ...

  5. Azure HDInsight HBase DR解决方案

    Sun wei  Sat, Feb 28 2015 3:07 AM Apache HBase是目前非常流行的NoSQL数据库,通过HDFS+Zookeep+Master+Region Server的架 ...

  6. Rman实现数据库迁移

    Rman实现数据库迁移(从库A迁移到库B)环境:服务器A:Oracle10g+AS3服务器B:Oracle10g+AS4准备工作: 1 在数据库B上建立与库A相同的目录结构(若由于磁盘空间等原因可以用 ...

  7. EF的表连接方法Include() - nlh774

    在EF中表连接常用的有Join()和Include(),两者都可以实现两张表的连接,但又有所不同. 例如有个唱片表Album(AlbumId,Name,CreateDate,GenreId),表中含外 ...

  8. Javscript高级

    Javscript高级: 函数内部属性 arguments: arguments(实参:包含所有传入方法的参数)特殊用法: arguments中有一个属性callee,是一个指针,指向拥有这个argu ...

  9. Apache-AB压力测试实例

    一 AB背景介绍 Apache附带的压力测试工具apache bench--简称ab,非常容易使用,并且完全可以摸你各种条件对Web服务器发起测试请求.ab可以直接在Web服务器本地发起测试请求,这对 ...

  10. Codeforces 611C New Year and Domino DP+容斥

    "#"代表不能放骨牌的地方,"."是可以放 500*500的矩阵,q次询问 开两个dp数组,a,b,a统计横着放的方案数,b表示竖着放,然后询问时O(1)的,容 ...