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 相关文章推荐
pydev使用wxpython找不到路径的解决方法
Feb 10 Python
python中文乱码的解决方法
Nov 04 Python
pyside写ui界面入门示例
Jan 22 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
Python pymongo模块用法示例
Mar 31 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
Python利用Scrapy框架爬取豆瓣电影示例
Jan 17 Python
Python netmiko模块的使用
Feb 14 Python
python with语句的原理与用法详解
Mar 30 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
pandas 操作 Excel操作总结
Mar 31 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中的函数声明与使用详解
2017/05/27 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
日期 时间js控件
2009/05/07 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
AngularJS ng-app 指令实例详解
2016/07/30 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
Python常用的日期时间处理方法示例
2015/02/08 Python
介绍Python的Django框架中的QuerySets
2015/04/20 Python
Python实现把回车符\r\n转换成\n
2015/04/23 Python
详解Python Socket网络编程
2016/01/05 Python
Python 自动刷博客浏览量实例代码
2017/06/14 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
python调用摄像头的示例代码
2020/09/28 Python
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
中专毕业生自我鉴定
2014/02/02 职场文书
爱耳日活动总结
2014/04/30 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
2015年保管员工作总结
2015/04/30 职场文书
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS