python抓取伯乐在线的全部文章,对标题分词后存入mongodb中
依赖包:
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中的更多相关文章
- Scrapy爬取伯乐在线的所有文章
本篇文章将从搭建虚拟环境开始,爬取伯乐在线上的所有文章的数据. 搭建虚拟环境之前需要配置环境变量,该环境变量的变量值为虚拟环境的存放目录 1. 配置环境变量 2.创建虚拟环境 用mkvirtualen ...
- python爬取博客圆首页文章链接+标题
新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...
- Python抓取豆瓣《白夜追凶》的评论并且分词
最近网剧<白夜追凶>在很多朋友的推荐下,开启了追剧模式,自从琅琊榜过后没有看过国产剧了,此剧确实是良心剧呀!一直追下去,十一最后两天闲来无事就抓取豆瓣的评论看一下 相关代码提交到githu ...
- python爬虫scrapy框架——爬取伯乐在线网站文章
一.前言 1. scrapy依赖包: 二.创建工程 1. 创建scrapy工程: scrapy staratproject ArticleSpider 2. 开始(创建)新的爬虫: cd Artic ...
- 爬虫实战——Scrapy爬取伯乐在线所有文章
Scrapy简单介绍及爬取伯乐在线所有文章 一.简说安装相关环境及依赖包 1.安装Python(2或3都行,我这里用的是3) 2.虚拟环境搭建: 依赖包:virtualenv,virtualenvwr ...
- python抓取月光博客的全部文章而且依照标题分词存入mongodb中
猛击这里:python抓取月光博客的全部文章
- 使用python抓取CSDN关注人的全部公布的文章
# -*- coding: utf-8 -*- """ @author: jiangfuqiang """ import re import ...
- Python实现抓取CSDN博客首页文章列表
1.使用工具: Python3.5 BeautifulSoup 2.抓取网站: csdn首页文章列表 http://blog.csdn.net/ 3.分析网站文章列表代码: 4.实现抓取代码: __a ...
- python抓取头条文章
python抓取头条美文并存储到mongodb # Author:song from multiprocessing import Pool from urllib.parse import urle ...
随机推荐
- CodeForces Round #285 Div.2
C.Misha and Forest (图论 BFS) 比赛进行了一半才想起来有场CF没打,=_=|| 前两道题快速切掉,C题一直卡没什么好的思路 憋了几天,忍不住偷偷瞄了一下别人AC的代码,发现我题 ...
- BZOJ2500: 幸福的道路
题解: 一道不错的题目. 树DP可以求出从每个点出发的最长链,复杂度O(n) 然后就变成找一个数列里最长的连续区间使得最大值-最小值<=m了. 成了这题:http://www.cnblogs.c ...
- 更改nginx默认的网页目录
默认网站根目录为/usr/local/nginx/html,要将它改成/homw/www vi /usr/local/nginx/conf/nginx.conf 将其中的 loca ...
- Js动态传递不定数目的参数
回调程序中,经常有这样的需求:用户传递一个回调方法,该方法可以有不定的参数. 如果参数数目固定则很容易实现,看代码: //回调函数1 function callback1(a,b,c) { alert ...
- unix 文件属性
在unix下提到文件属性,不得不提的一个结构就是stat,stat结构一般定义如下: struct stat { dev_t st_dev; /* ID of device containing fi ...
- Linux 下文件名乱码(无效的编码)的解决办法
文件是在WIndows 下创建的,Windows 的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码 不一致所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码. ...
- 部分常用Express方法详解
app.set(name, value) 分配给name一个value,并将name作为app settings table的一个属性. 使用app.set('foo', true) 相当于调用 ap ...
- 50道经典的JAVA编程题 (11-15)
50道经典的JAVA编程题 (11-15),新年的第一天,继续啦...\(^o^)/~,这50道题都跨年了啊...哈哈 [程序11] TestTN.java 题目:有1.2.3.4个数字,能组成多少个 ...
- 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇04:如何实现触控操作》
4.如何实现触控操作 触控操作概述: 随着APPLE.Samsung.SONY等众多公司,将掌机.电脑和手机等产品在触控领域的不断探索,以触控为操作的机型越来越多的被投放到市场当中.触控游戏.触控软件 ...
- 【Spark学习】Apache Spark项目简介
引言:本文直接翻译自Spark官方网站首页 Lightning-fast cluster computing 从Spark官方网站给出的标题可以看出:Spark——像闪电一样快的集群计算 Apache ...