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中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
Python下使用Psyco模块优化运行速度
Apr 05 Python
进一步了解Python中的XML 工具
Apr 13 Python
Python的函数的一些高阶特性
Apr 27 Python
Python实现的中国剩余定理算法示例
Aug 05 Python
python调用百度REST API实现语音识别
Aug 30 Python
详解Python time库的使用
Oct 10 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
Django用户身份验证完成示例代码
Apr 03 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
python 发送邮件的四种方法汇总
Dec 02 Python
PO模式在selenium自动化测试框架的优势
Mar 20 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
php中curl使用指南
2015/02/05 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
nodejs分页类代码分享
2014/06/17 NodeJs
Egret引擎开发指南之运行项目
2014/09/03 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
Python学习笔记_数据排序方法
2014/05/22 Python
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
详细解读Python中的__init__()方法
2015/05/02 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
python得到单词模式的示例
2018/10/15 Python
python实现烟花小程序
2019/01/30 Python
详解python中init方法和随机数方法
2019/03/13 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
Python新手学习raise用法
2020/06/03 Python
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
销售人员自我评价怎么写
2013/09/19 职场文书
自荐信格式范文
2013/10/07 职场文书
迟到检讨书900字
2014/01/14 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
北京颐和园导游词
2015/01/30 职场文书
法院答辩状格式
2015/05/22 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
热爱劳动主题班会
2015/08/14 职场文书
《搭石》教学反思
2016/02/18 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python