依赖包:

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. [原]Unity3D深入浅出 - 认识开发环境中的Layers面板

    Layers(分层)下拉列表:用来控制Scene视图中游戏对象的显示,在下拉菜单中为勾选状态的物体将显示在Scene视图中. Everything:显示所有的游戏对象 Nothing:不显示任何游戏对 ...

  2. POJ 1273 (基础最大流) Drainage Ditches

    虽然算法还没有理解透,但以及迫不及待地想要A道题了. 非常裸的最大流,试试lrj的模板练练手. #include <cstdio> #include <cstring> #in ...

  3. Codeforces Round #306 (Div. 2)

    A. Two Substrings You are given string s. Your task is to determine if the given string s contains t ...

  4. ShareSDK 实现新浪微博分享(微信,QQ,新浪微博类似)

    1 . 分享(前提是集成了sdk,配置好了Key),只要实现点击事件,调用shareSina(); ShareSDK.initSDK(this); private void shareSina() { ...

  5. ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访问

    环境: 192.168.2.10 192.168.2.11 实现:2.10 ssh无需密码登录到2.11 在2.10 ssh到2.11机器上,需要密码,这样对一些脚本工作不方便,因为需要密码,也就是需 ...

  6. JSP的笔记

    JSP是一种特殊的Servlet,全称是java server page,属于服务器端语言 就JSP和Servle,HTML比较,三者的优缺点简略如下: Servlet: 缺点:不适合作为HTML的响 ...

  7. centos ssh 免密码登录

    最近在学习的过程中遇到这个问题: A主机和B主机: A 免密码登录B: 首先在A的 ~/.ssh 目录中 执行 ssh-keygen -t rsa 一路回车 最后生成连个文件: 将id_rsa.pub ...

  8. IO_REMOVE_LOCK使用方法小结(转载加改正)

    原文链接:http://www.programlife.net/io_remove_lock.html IO_REMOVE_LOCK(删除锁)的具体结构没有公开,WDK的文档中中查不到IO_REMOV ...

  9. 嵌入式开发应该掌握的一些Linux命令

    Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统, ...

  10. 609C Load Balancing

    题意: ”平均数“的意思是:最大数和最小数之间的差值为0或1: 先求“平均”数组,再相减. #include<iostream> #include<cstdlib> #incl ...