python实现博客文章爬虫示例


Posted in Python onFebruary 26, 2014
#!/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'])
Python 相关文章推荐
python字符串连接的N种方式总结
Sep 17 Python
朴素贝叶斯算法的python实现方法
Nov 18 Python
Python中的MongoDB基本操作:连接、查询实例
Feb 13 Python
python 性能优化方法小结
Mar 31 Python
python实现堆和索引堆的代码示例
Mar 19 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
Python实现蒙特卡洛算法小实验过程详解
Jul 12 Python
pytorch 实现查看网络中的参数
Jan 06 Python
python十进制转二进制的详解
Feb 07 Python
Python打印特殊符号及对应编码解析
May 07 Python
零基础小白多久能学会python
Jun 22 Python
python爬取抖音视频的实例分析
Jan 19 Python
python处理中文编码和判断编码示例
Feb 26 #Python
python实现网页链接提取的方法分享
Feb 25 #Python
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
Feb 24 #Python
python实现socket客户端和服务端简单示例
Feb 24 #Python
python抓取网页内容示例分享
Feb 24 #Python
使用python装饰器验证配置文件示例
Feb 24 #Python
python通过urllib2爬网页上种子下载示例
Feb 24 #Python
You might like
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
几行js代码实现自适应
2017/02/24 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
python多重继承新算法C3介绍
2014/09/28 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
生产车间主管岗位职责
2013/12/28 职场文书
药学职务聘任书
2014/03/29 职场文书
道德之星事迹材料
2014/05/03 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
市场营销工作计划书
2014/09/15 职场文书
心灵点滴观后感
2015/06/02 职场文书
教师节大会主持词
2015/07/06 职场文书
学校隐患排查制度
2015/08/05 职场文书
商务信函英语问候语
2015/11/10 职场文书
初中化学教学反思
2016/02/22 职场文书
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技