基于Source和正则表达式的Scala网页内容抓取
来源:互联网 发布:tomcat连接不上数据库 编辑:程序博客网 时间:2024/05/18 22:15
网页内容的抓取使用了Scala标准库的Source,网页内容的提取使用了正则表达式。中间练习了集合类的一些操作和文件读写操作,对正则表达式也重温了一下,特别是跨行匹配(多行匹配)研究了一些时间。提取后的文本写在了文件中。在Ubuntu 10.04 和 Scala 2.10.0 下运行成功。
代码如下:
import
java.io._
def getIndex() = {
val indexSource = scala.io.Source.fromURL(
"http://www.yifan100.com/dir/15136/"
).mkString
val indexRegex =
""
"<a target="
_blank
" href="
(.+\.html)
" title="
.+
" >(.+)</a>"
""
.r
(List[(String, String)]() /: indexRegex.findAllMatchIn(indexSource).toList) { (result, item) =>
(
"http://www.yifan100.com"
+ (item group
1
), item group
2
) :: result
}
// return List[(url:String, title:String)]
}
def getContent(url:String) = {
val raw = scala.io.Source.fromURL(url).mkString
val reg =
""
"(?s).*<div class="
artcontent
">(.*)<div id="
zhanwei
">.*"
""
.r
(reg findFirstMatchIn raw).map[String](item => {
val s = (item group
1
).replaceAll(
"<br>"
,
"\r\n"
).
replaceAll(
""
"(?s)</?.*?>"
""
,
""
).
replaceAll(
""
"^\s+"
""
,
""
).
replaceAll(
" "
,
" "
)
s
}
)
// return Option[String]
}
def writeContent(content:Option[String], title:String) {
if
(content.isEmpty)
println(
"Not write "
+ title +
".txt"
)
else
{
val writer =
new
PrintWriter(
new
File(title +
".txt"
))
writer write content.get
writer.close()
println(
"Write "
+ title +
".txt"
)
}
}
def getIt() {
getIndex().foreach(item => writeContent(getContent(item._1), item._2))
}
getIt()
0 0
- 基于Source和正则表达式的Scala网页内容抓取
- 基于Source和正则表达式的Scala网页内容抓取
- 基于Source和正则表达式的Scala网页内容抓取
- ObjC利用正则表达式抓取网页内容
- PHP 正则表达式抓取网页内容。
- 用正则表达式抓取制定网页的特定内容(本文以抓取a标签为例)
- C# 正则表达式抓取网页上某个标签的内容,并替换链接地址和图片地址
- android 开发--抓取网页解析网页内容的若干方法(网络爬虫)(正则表达式)
- 用于抓取网页内容的常用正则
- ObjC利用正则表达式抓取网页内容(网络爬虫)
- ObjC利用正则表达式抓取网页内容(网络爬虫)
- ObjC利用正则表达式抓取网页内容(网络爬虫)
- ObjC利用正则表达式抓取网页内容(网络爬虫)
- ObjC利用正则表达式抓取网页内容(网络爬虫)
- ObjC利用正则表达式抓取网页内容(网络爬虫)
- 转载自android 开发--抓取网页解析网页内容的若干方法(网络爬虫)(正则表达式)
- 正则表达式抓取网页资源
- 基于java正则表达式的网页解析
- 用spring-session来管理http session
- Linux每日学习(一)
- 页面响应时间,请求响应时间
- ant实现java项目动态构建与部署
- json转换成list
- 基于Source和正则表达式的Scala网页内容抓取
- Ubuntu 下用NDK编译移植 FFmpeg 2.0 (配置最新版x264) 到Android平台
- Mybatis 动态sql
- iOS开发 打印CGRect时用NSStringFromCGRect
- 【Codeforces Round 273 (Div 2)C】【贪心 脑洞】 Table Decorations 三种气球装饰桌子 同桌三个气球不完全同色的最多桌子装饰数
- 【LEETCODE】241-Different Ways to Add Parentheses
- 转载一篇android裁剪图片的解决方案,个人呢觉得很好的
- 基于暗通道去雾算法的实现与优化(二)opencv在pc上的实现
- Codeforces Round #335 (Div. 2) 606C Sorting Railway Cars(hash)