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访问纯真IP数据库的代码
May 19 Python
linux系统使用python监测网络接口获取网络的输入输出
Jan 15 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
Nov 06 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
python实现机器学习之元线性回归
Sep 06 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
python ChainMap的使用和说明详解
Jun 11 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
django 中使用DateTime常用的时间查询方式
Dec 03 Python
python本地文件服务器实例教程
May 02 Python
Python Matplotlib库实现画局部图
Nov 17 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查询域名状态whois的类
2006/11/25 PHP
简单的PHP留言本实例代码
2010/05/09 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
网站上面有这种切换效果
2006/06/26 Javascript
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
python3 反射的四种基本方法解析
2019/08/26 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
Europcar葡萄牙:葡萄牙汽车和货车租赁
2017/10/13 全球购物
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
联想C++笔试题
2012/06/13 面试题
模具专业求职信
2014/06/26 职场文书
岗位聘任报告
2015/03/02 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
Java常用函数式接口总结
2021/06/29 Java/Android
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL
Java中的Kotlin 内部类原理
2022/06/16 Java/Android