依赖包:

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. 手机3D游戏开发:自定义Joystick的相关设置和脚本源码

    Joystick在手游开发中非常常见,也就是在手机屏幕上的虚拟操纵杆,但是Unity3D自带的Joystick贴图比较原始,所以经常有使用自定义贴图的需求. 下面就来演示一下如何实现自定义JoySti ...

  2. requirejs 小结

    1,“生搬硬套”-----js依赖的写法,依赖关系如这里的嵌套关系: /** * 模块化加载,注意各个js文件的依赖关系(嵌套) */ require(["jquery"], fu ...

  3. Centos 下Nginx 自启动脚本

    #!/bin/bash #ckconfig: NGINX_PATH=/web/container/nginx- NGINX_COMMAND=$NGINX_PATH/sbin/nginx NGINX_P ...

  4. Java was started but returned exit code=13 C:\ProgramData\Oracle\Java\javapath\javaw.exe

    ---------------------------Eclipse---------------------------Java was started but returned exit code ...

  5. PHP 进行蜘蛛访问日志统计

    $useragent = addslashes(strtolower($_SERVER['HTTP_USER_AGENT'])); if (strpos($useragent, 'googlebot' ...

  6. cocos2d中两种移动的算法

    在对cocos2d的sprite处理移动的过程中,通常用到的两种移动的算法: 假设这个CCNode是直接放在CCLayer上的 距离差法: CGPoint curTouchPosUI = [touch ...

  7. Swift之基础知识

    Swift之基础知识 出于对Swift3.0的学习,写下这篇基本语法的笔记.希望能帮助记忆 -0- 这边提供Swift3.0中文教材,资源链接: https://pan.baidu.com/s/1c2 ...

  8. ubuntu安装和卸载软件命令

    ubuntu安装和卸载软件命令 Ubuntu软件安装与删除相关命令 安装软件 命令: apt-get install softname1 softname2 softname3…… 卸载软件 命令: ...

  9. HDU-4611 Balls Rearrangement 循环节,模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4611 先求出循环节,然后比较A和B的大小模拟过去... //STATUS:C++_AC_15MS_43 ...

  10. 重新学习struts

    这就是所谓的一边工作一边学习. 今天准备把给公司写个管理页面,按照之前的路数,写起来应该挺快,但是不太规范.也就沉下心来学习一下了. 第一个学习的是,之前,在学校,听师兄说过,对页面编码可用inter ...