--http://blog.csdn.net/leixiaohua1020/article/list/14?viewmode=contents

function saveData(data)
local file = io.open("temp.html", "w")
file:write(data)
file:close()
end function getPageCount(url)
local http = require("socket.http")
local resp = http.request(url)
local s = string.find(resp, "<div id=\"papelist\" class=\"pagelist\">")
local e = string.find(resp, "</div>", s)
local divData = string.sub(resp, s, e + 5)
--print(divData)
local i, j = string.find(divData, "共%d+页")
local pageCount = string.sub(divData, i + 3, j - 3)
return pageCount
end function getTitles(username)
if(username == nil or username == "") then
print("username is nil")
return
end
local preUrl = "http://blog.csdn.net/"
local endUrl = "?viewmode=contents"
local url = preUrl .. username .. endUrl
local pageCount = getPageCount(url)
for i = 1, pageCount do
local blogUrl = preUrl .. username .. "/article/list/" .. i .. endUrl
local http = require("socket.http")
local resp = http.request(blogUrl)
local pos = 1
_, pos = string.find(resp, "link_title", pos)
while(pos ~= nil) do
local i, j = string.find(resp, "details/%d+\">", pos)
--print("pageid = " .. string.sub(resp, i + 8, j - 2))
local k, _ = string.find(resp, "</a></span>", j)
print(string.sub(resp, j + 11, k - 23))
_, pos = string.find(resp, "link_title", pos)
end
end
end getTitles("leixiaohua1020")

如果想保存一篇指定的博文(只要正文),该怎么做呢?

其实只要我们预先保存下博文的js、css和一些控制正文的html标记,然后把正文内容填充进去就可以了。

以下lua脚本可以获得

<div id="article_content" class="article_content">
正文
</div>

start.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://static.blog.csdn.net/scripts/jquery.js" type="text/javascript"></script>
<link rel="Stylesheet" type="text/css" href="http://static.blog.csdn.net/skin/skin-blue/css/style.css?v=1.1" />
<link rel="shortcut icon" href="http://c.csdnimg.cn/public/favicon.ico" />
<link type="text/css" rel="stylesheet" href="http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/default.css" />
</head>
<body>
<div id="container">
<script type="text/javascript">
var username = "x_iya";
var _blogger = username;
var blog_address = "http://blog.csdn.net/x_iya";
var static_host = "http://static.blog.csdn.net";
var currentUserName = "";
</script>
<div id="body">
<div id="main">
<div class="main">
<div id="article_details" class="details">

end.html

</div>
</div>
</div>
<script type="text/javascript" src="http://static.blog.csdn.net/scripts/newblog.min.js"></script>
</div>
</body>
</html>

lua代码:

function GetHtml(url)
local http = require("socket.http")
local resp = http.request(url)
local s = string.find(resp, "<div id=\"article_content\" class=\"article_content\">")
local e = string.find(resp, "<!--", s)
local data = string.sub(resp, s, e - 1)
return data
end function SaveData(data)
local file = io.open("csdn.html", "w")
file:write(data)
file:close()
end function ReadData(filepath)
local file = io.open(filepath, "r")
local data = file:read("*a")
file:close()
return data
end --local url = "http://blog.csdn.net/x_iya/article/details/52327827" if #arg == 1 then
local url = arg[1]
local startData = ReadData("start.html")
local endData = ReadData("end.html")
local html = startData .. GetHtml(url) .. endData
SaveData(html)
else
print("Usage: lua csdn.lua url")
end

遍历CSDN博客的更多相关文章

  1. 【转】Android Building System 总结 - 一醉千年 - CSDN博客

    原文网址:http://www.360doc.com/content/15/0314/23/1709014_455175716.shtml  Android Building System 总结 收藏 ...

  2. Python爬取CSDN博客文章

    0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...

  3. Android应用开发-小巫CSDN博客clientJsoup篇

    Android应用开发-小巫CSDN博客clientJsoup篇 距上一篇博客已经过去了两个星期,小巫也认为很抱歉,由于在忙着做另外一个项目,差点儿抽不出空来,这不小巫会把剩下的博文全部在国庆补上.本 ...

  4. PHP採集CSDN博客边栏的阅读排行

    项目中要用到採集的数据,所以就先拿CSDN博客来试了试.这里使用Simple HTML DOM(官网)这个库,它可以方便的遍历HTML文档. <?php include_once('simple ...

  5. Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客

    ==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...

  6. Python爬虫简单实现CSDN博客文章标题列表

    Python爬虫简单实现CSDN博客文章标题列表 操作步骤: 分析接口,怎么获取数据? 模拟接口,尝试提取数据 封装接口函数,实现函数调用. 1.分析接口 打开Chrome浏览器,开启开发者工具(F1 ...

  7. 神一样的CSDN博客排名规则

    本文转载于:http://blog.csdn.net/littletigerat/article/details/17448521 神一样的CSDN博客排名规则 一.引言 年. 马年CSDN博客,毫无 ...

  8. 梦想还是要有的-纪念正式成为csdn博客专家暨年中总结

    csdn博客:http://blog.csdn.net/tuzongxun 我的csdn历程(坚持总会有收获):   一年零三个月之前,2015年3月3日,我在csdn写下第一篇技术博客,只是记录了一 ...

  9. 从csdn博客搬家过来,请多关照!

    之前一直在csdn博客,也写了不少关于java的文章,主要是学习java上的一些问题.想通过这种方式来加深对问题的认知,同时也可以帮助到志同道合的人,一起在编程的道路上共进,共勉.

随机推荐

  1. CommandPattern(命令模式)-----Java/.Net

    命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该 ...

  2. samba服务器红帽5.4搭建,亲测可用!!!

    samba服务器搭建 服务器的环境 红帽5.4 vm15 挂载光盘 mount mount -t iso9660 设备目录 /mnt 表示挂载 软件包安装 samba服务器只需安装两个软件包,先找到软 ...

  3. Spring中常见的设计模式——代理模式

    一.代理模式的应用场景 生活中的中介,黄牛,等一系列帮助甲方做事的行为,都是代理模式的体现.代理模式(Proxy Pattern)是指为题对象提供一种代理,以控制对这个对象的访问.代理对象在客户端和目 ...

  4. 通俗易懂理清mybatis中SqlSessionSql、SqlSessionTemplate、SessionFactory和SqlSessionFactoryBean之间的关系

    我潇洒的灰大狼又回来啦.今天送大家的一句话是: 保持耐心,永远年轻,永远热泪盈眶. 前言 先容我哭一会儿,呜呜呜~昨晚写了一半的文章,还没保存就盖上盖子准备回家,拔下电源准备把电脑塞进书包带回家完成时 ...

  5. Go数组和切片你不知道的区别

    开篇语 数组和切片是两种不同的数据结构,比较常见,在Go语言中同时存在,今天我们就一起来看看他们在使用方式上,原理上的一些区别? 数组 在Go语言中,数组是一种具有相同类型固定大小的一种数据结构. 我 ...

  6. java高并发梳理

  7. POJ 3304 Segments(判断直线与线段是否相交)

    题目传送门:POJ 3304 Segments Description Given n segments in the two dimensional space, write a program, ...

  8. Go Web 编程之 程序结构

    概述 一个典型的 Go Web 程序结构如下,摘自<Go Web 编程>: 客户端发送请求: 服务器中的多路复用器收到请求: 多路复用器根据请求的 URL 找到注册的处理器,将请求交由处理 ...

  9. 基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇

    前提 前置文章: Github Page:<基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> Coding Page:<基于Netty和SpringBoot实现 ...

  10. kmp-最小子串回文次数

    poj 2406 Given two strings a and b we define a*b to be their concatenation. For example, if a = &quo ...