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目录操作之python遍历文件夹后将结果存储为xml
Jan 27 Python
python下paramiko模块实现ssh连接登录Linux服务器
Jun 03 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python循环语句中else的用法总结
Sep 11 Python
python 连接各类主流数据库的实例代码
Jan 30 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
实例讲解Python中整数的最大值输出
Mar 17 Python
在Python中构建增广矩阵的实现方法
Jul 01 Python
Django Rest framework权限的详细用法
Jul 25 Python
Window10下python3.7 安装与卸载教程图解
Sep 30 Python
Python的形参和实参使用方式
Dec 24 Python
python3.4中清屏的处理方法
Jul 06 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/20 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
PHP连接sftp并下载文件的方法教程
2018/08/26 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
python3 实现对图片进行局部切割的方法
2018/12/05 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
主要的Ajax框架都有什么
2013/11/14 面试题
大学生创业感言
2014/01/25 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
建筑安全标语
2014/06/07 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python