依赖包:

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. 【转】第一个Linux内核驱动程序

    原文网址:http://blog.csdn.net/nexttake/article/details/8181008 刚看 O’REILLY 写的<LINUX 设备驱动程序>时.作者一再强 ...

  2. 学习Erlang--1、入门

    1.正式起航 从前,一名程序员偶然读到了一本古怪的语言图书,相等其实不是相等,变量其实是不能改变的,语法是那么陌生,它甚至不是面向对象,这些程序实在是太过另类…… 另类的不仅仅是程序,编程的教学步骤也 ...

  3. GDI+ 学习记录(26): 显示图像 - Image

    //显示图像 var   g: TGPGraphics;   img: TGPImage; begin   g := TGPGraphics.Create(Self.Canvas.Handle);   ...

  4. HDU 3642 Get The Treasury 线段树+分层扫描线

    http://www.acmerblog.com/hdu-3642-get-the-treasury-6603.html 学习:三维就是把竖坐标离散化分层,每一层进行线段树二维面积并就好了

  5. HNU OJ10086 挤挤更健康 记忆化搜索DP

    挤挤更健康 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 339, A ...

  6. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (一) 京东 商品搜索

    之前有发布一篇文章“e2e 自动化集成测试 环境搭建 Node.js Selenium WebDriverIO Mocha Node-Inspector”, 主要是讲了,如何搭建环境, 其中开发环境使 ...

  7. HOG:从理论到OpenCV实践

    (转载请注明出处:http://blog.csdn.net/zhazhiqiang/ 未经允许请勿用于商业用途) 一.理论 1.HOG特征描述子的定义:     locally normalised ...

  8. [LeetCode]Linked List Cycle II解法学习

    问题描述如下: Given a linked list, return the node where the cycle begins. If there is no cycle, return nu ...

  9. 为Virtualbox中的Solaris10安装VBoxAdditions

    安装增强插件,以便能够和虚拟机拖放文件 1.启动虚拟系统,选择安装VirtualBox增强功 能(Guest Additions).在VirtualBox中选择“设备”->“安装增强功能”.Vi ...

  10. 安装mysql-5.7.9-winx64

    1.mysql-5.7.9-winx64.zip下载 官方网站下载地址:http://dev.mysql.com/downloads/mysql/5.7.html 2.解压到D:\MySqlDataB ...