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 07 Python
Linux下用Python脚本监控目录变化代码分享
May 21 Python
Python+matplotlib绘制不同大小和颜色散点图实例
Jan 19 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
python logging模块书写日志以及日志分割详解
Jul 22 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
pandas 空数据处理方法详解
Nov 02 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
用Python去除图像的黑色或白色背景实例
Dec 12 Python
Python PIL库图片灰化处理
Apr 07 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
Feb 24 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 格式化数字的时候注意数字的范围
2010/04/13 PHP
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
python实现多线程抓取知乎用户
2016/12/12 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
如何对python的字典进行排序
2020/06/19 Python
如何利用python生成MD5并去重
2020/12/07 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
印度在线杂货店:bigbasket
2018/08/23 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
房地产项目策划书
2014/02/05 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
现实表现材料范文
2014/12/23 职场文书
安全检查汇报材料
2014/12/26 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏
java实现面板之间切换功能
2022/06/10 Java/Android