python实现博客文章爬虫示例_python

复制代码 代码如下:

#!/usr/bin/python
#-*-coding:utf-8-*-
# JCrawler
# Author: Jam <810441377@qq.com>

import time
import urllib2
from bs4 import BeautifulSoup

# 目标站点
TargetHost = "http://adirectory.blog.com"
# User Agent
UserAgent  = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36'
# 链接采集规则
# 目录链接采集规则
CategoryFind    = [{'findMode':'find','findTag':'div','rule':{'id':'cat-nav'}},
                   {'findMode':'findAll','findTag':'a','rule':{}}]
# 文章链接采集规则
ArticleListFind = [{'findMode':'find','findTag':'div','rule':{'id':'content'}},
                   {'findMode':'findAll','findTag':'h2','rule':{'class':'title'}},
                   {'findMode':'findAll','findTag':'a','rule':{}}]
# 分页URL规则
PageUrl  = 'page/#page/'
PageStart = 1
PageStep  = 1
PageStopHtml = '404: Page Not Found'

def GetHtmlText(url):
    request  = urllib2.Request(url)
    request.add_header('Accept', "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp")
    request.add_header('Accept-Encoding', "*")
    request.add_header('User-Agent', UserAgent)
    return urllib2.urlopen(request).read()

def ArrToStr(varArr):
    returnStr = ""
    for s in varArr:
        returnStr += str(s)
    return returnStr

def GetHtmlFind(htmltext, findRule):
    findReturn = BeautifulSoup(htmltext)
    returnText = ""
    for f in findRule:
        if returnText != "":
            findReturn = BeautifulSoup(returnText)
        if f['findMode'] == 'find':
            findReturn = findReturn.find(f['findTag'], f['rule'])
        if f['findMode'] == 'findAll':
            findReturn = findReturn.findAll(f['findTag'], f['rule'])
        returnText = ArrToStr(findReturn)
    return findReturn

def GetCategory():
    categorys = [];
    htmltext = GetHtmlText(TargetHost)
    findReturn = GetHtmlFind(htmltext, CategoryFind)

    for tag in findReturn:
        print "[G]->Category:" + tag.string + "|Url:" + tag['href']
        categorys.append({'name': tag.string, 'url': tag['href']})
    return categorys;

def GetArticleList(categoryUrl):
    articles = []
    page = PageStart
    #pageUrl = PageUrl
    while True:
        htmltext = ""
        pageUrl  = PageUrl.replace("#page", str(page))
        print "[G]->PageUrl:" + categoryUrl + pageUrl
        while True:
            try:
                htmltext = GetHtmlText(categoryUrl + pageUrl)
                break
            except urllib2.HTTPError,e:
                print "[E]->HTTP Error:" + str(e.code)
                if e.code == 404:
                    htmltext = PageStopHtml
                    break
                if e.code == 504:
                    print "[E]->HTTP Error 504: Gateway Time-out, Wait"
                    time.sleep(5)
                else:
                    break

        if htmltext.find(PageStopHtml) >= 0:
            print "End Page."
            break
        else:

            findReturn = GetHtmlFind(htmltext, ArticleListFind)

            for tag in findReturn:
                if tag.string != None and tag['href'].find(TargetHost) >= 0:
                    print "[G]->Article:" + tag.string + "|Url:" + tag['href']
                    articles.append({'name': tag.string, 'url': tag['href']})

            page += 1

    return articles;

print "[G]->GetCategory"
Mycategorys = GetCategory();
print "[G]->GetCategory->Success."
time.sleep(3)
for category in Mycategorys:
   print "[G]->GetArticleList:" + category['name']
   GetArticleList(category['url'])

时间: 2024-12-30 10:50:58

python实现博客文章爬虫示例_python的相关文章

python使用rabbitmq实现网络爬虫示例_python

编写tasks.py 复制代码 代码如下: from celery import Celeryfrom tornado.httpclient import HTTPClientapp = Celery('tasks')app.config_from_object('celeryconfig')@app.taskdef get_html(url):    http_client = HTTPClient()    try:        response = http_client.fetch(u

[Python学习] 简单网络爬虫抓取博客文章及思想介绍

        前面一直强调Python运用到网络爬虫方面非常有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简单介绍下Python是如何爬去网络数据的,文章知识非常简单,但是也分享给大家,就当简单入门吧!同时只分享知识,希望大家不要去做破坏网络的知识或侵犯别人的原创型文章.主要包括:         1.介绍爬取CSDN自己博客文章的简单思想及过程         2.实现Python源码爬取新浪韩寒博客的316篇文章 一.爬虫的简单思想      最近看刘兵

值得关注的10个python语言博客(转)

大家好,还记得我当时学习python的时候,我一直努力地寻找关于python的博客,但我发现它们的数量很少.这也是我建立这个博客的原因,向大家分享我自己学到的新知识.今天我向大家推荐10个值得我们关注的python博客,这些博客的博主都会定期的更新而且他们的文章都很不错.下面是博客列表:   1.首先第一个肯定是毋庸置疑的Planet Python这是最出名的python博客其中之一,快去看看,我希望你能找到对你有用的东西,昨天它还更新了呢! 2.第二个博客是lucumr,博主是flask的创始

node.js实现博客小爬虫的实例代码_node.js

前言 爬虫,是一种自动获取网页内容的程序.是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化. 这篇文章介绍的是利用node.js实现博客小爬虫,核心的注释我都标注好了,可以自行理解,只需修改url和按照要趴的博客内部dom构造改一下filterchapters和filterchapters1就行了! 下面话不多说,直接来看实例代码 var http=require('http'); var Promise=require('Bluebird'); var cheeri

有人很好奇我博客文章的默认展图是怎么弄的?

有人很好奇我博客文章的默认展图是怎么弄的? 其实很简单,就是一个思路:www.dkill.net 我肯定懒得每次都传,那就随机生成(类似于自动化) 看2张图就清楚了:

如何在博客文章中添加背景图片

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 博客文章中添加背景图片 一.blog贴图(仅限网易博客) 其实贴图的显示问题和图片的来源有关.如果blog中插入的图片是来自网易相册的,就可以在主页显示,其它来源的图片就不能了.因此,大家想要贴图在主页显示,只要把图片先存入网易相册,再调用相册里的图片链接就ok了!(贴图应在设计视图完成!)设计图可以到我图网里下载http://www.ooo

防止博客文章被恶意转载的方法

所谓"恶意转载",指的是一些不合常规和不文明的转载行为.包括批量的转载很多文章,通过程序自动转载,转载后删除署名或者原文链接等等,很多博客都遇到过这种情况,大量的不注明出处的转载,会使得原创作者处于非常尴尬的处境,辛苦创作的文章得不到应有的回报.下面我就介绍一些针对这类恶意转载的应对措施. 通过技术方式提醒 增加这样一段JavaScript代码,当别人复制你文章内容的时候,系统会自动将版权信息和原文地址加入到复制内容中,以提醒复制的人注意版权,这时别人要是还要手动将版权信息和原文地址删

AideRSS下的博客文章排行

AideRSS是个有趣的博客统计工具,通过一些外部工具或者反向链接来给出博客文章的综合评分,有一定的参考价值.可惜对于中文博客来说,通过Digg和Del.icio.us来评测不是特别准确,特别是Digg的中文用户很少,如果其能够使用Google Reader的Share或者鲜果阅读器的外部推荐等数据来统计,那对中文用户来说会更准确一些. AideRSS的统计主要是根据西方的社会化工具使用情况评分的,因此如果这个工具在国内不普及,那么就会出现误差. 下面是月光博客的统计数据,显示了从2007年7月

提高博客文章点击:编写吸引人的博客标题

网页制作Webjx文章简介:怎样撰写吸引人的博客标题. 一谈到怎样撰写博客标题这个话题的时候,很多人自然而然就想到了网站SEO.博客的优化.提高网站流量之类的,德意想谈的是真真实实地为内容去写标题,无论你是wordpress.zblog.pjblog.新浪网易搜狐还是其它什么的博客,当你真正为内容认真的去写标题的时候,优化和SEO自然就能发挥真正的作用. 跟哪位广告大师学习写标题?广告之父:大卫·奥格威(David Ogilvy) ! 可能有的人不是很熟悉大卫·奥格威,简单地介绍一下,大卫·奥格