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语言技巧之三元运算符使用介绍
Mar 04 Python
Python写的PHPMyAdmin暴力破解工具代码
Aug 06 Python
wxpython中自定义事件的实现与使用方法分析
Jul 21 Python
Python 文件操作的详解及实例
Sep 18 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
Python创建或生成列表的操作方法
Jun 19 Python
django的auth认证,authenticate和装饰器功能详解
Jul 25 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
Nov 20 Python
tensorflow 实现从checkpoint中获取graph信息
Feb 10 Python
python 爬取百度文库并下载(免费文章限定)
Dec 04 Python
python实现KNN近邻算法
Dec 30 Python
教你使用Python pypinyin库实现汉字转拼音
May 27 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多用户计数器代码
2007/03/11 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
学习PHP session的传递方式
2016/06/15 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
JavaScript中校验银行卡号的实现代码
2016/12/19 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
python中requests使用代理proxies方法介绍
2017/10/25 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
详解python pandas 分组统计的方法
2019/07/30 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
护士节策划方案
2014/05/19 职场文书
某某同志考察材料
2014/05/28 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
2015年班组工作总结
2015/04/20 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python