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库urllib与urllib2主要区别分析
Jul 13 Python
Python正则表达式的使用范例详解
Aug 08 Python
Django卸载之后重新安装的方法
Mar 15 Python
Python实现的归并排序算法示例
Nov 21 Python
django静态文件加载的方法
May 20 Python
Django2.1.3 中间件使用详解
Nov 26 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
解决keras backend 越跑越慢问题
Jun 18 Python
python 如何实现遗传算法
Sep 22 Python
python3实现Dijkstra算法最短路径的实现
May 12 Python
python内置模块之上下文管理contextlib
Jun 14 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
在项目中寻找代码的坏命名
2012/07/14 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
js常用函数 不错
2006/09/08 Javascript
jQuery中调用WebService方法小结
2011/03/28 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
jQuery 操作input中radio的技巧
2016/07/18 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
python基础教程之匿名函数lambda
2017/01/17 Python
关于Python面向对象编程的知识点总结
2017/02/14 Python
Django卸载之后重新安装的方法
2017/03/15 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
详解python之协程gevent模块
2018/06/14 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
置业顾问岗位职责
2014/03/02 职场文书
基督教婚礼主持词
2014/03/14 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技