对搜索引擎开源项目的代码分析——文档抓取
2014-04-21 00:00
302 查看
摘要: 微博的抓取
搜索引擎的文档抓取部分代码分析: 首先 var ( access_token = flag.String("access_token", "", "用户的访问令牌") weibo = gobo.Weibo{} users_file = flag.String("users_file", "users.txt", "从该文件读入要下载的微博用户名,每个名字一行") output_file = flag.String("output_file", "weibo_data.txt", "将抓取的微博写入下面的文件") num_weibos = flag.Int("num_weibos", 2000, "从每个微博账号中抓取多少条微博") ) 代码部分运用”flag”包选项用于各种命令行参数的解析;第一行对应access_token的解析规则,-access_token选项对应的值是字符串类型字符串,默认值是””;以下皆是此运用! 在main函数开始部分,flag.Parse()函数进行解析; func main() { flag.Parse() // 读取用户名 content, err := ioutil.ReadFile(*users_file) if err != nil { log.Fatal("无法读取-users_file") } users := strings.Split(string(content), "\n") outputFile, _ := os.Create(*output_file) defer outputFile.Close() ....... 其中ioutil.ReadFile和strings.Split函数获取包含微博用户名的部分;个人认为标注红线部分可以进行如下的更改,以使得程序能够顺利运行; outputFile, error := os.Create(*output_file) if err != nil { panic (err) } 利用for循环进行获取非空的大量用户的微博,其中下面的代码部分设置了抓取用户微博条数时的时间限制,以此来判定是否抓取顺利; for _, user := range users { if user == "" { continue } log.Printf("抓取 @%s 的微博", user) statuses, err := contrib.GetStatuses( &weibo, *access_token, user, 0, *num_weibos, 5000) // 超时5秒 if err != nil { log.Print(err) continue } for _, status := range statuses { t, _ := time.Parse("Mon Jan 2 15:04:05 -0700 2006", status.Created_At) outputFile.WriteString(fmt.Sprintf( "%d||||%d||||%d||||%s||||%d||||%d||||%d||||%s||||%s||||%s\n", status.Id, uint32(t.Unix()), status.User.Id, status.User.Screen_Name, status.Reposts_Count, status.Comments_Count, status.Attitudes_Count, status.Thumbnail_Pic, status.Original_Pic, status.Text)) } } } 下面的代码再次利用for循环获取一个用户的相关的内容并按照一定的格式写入相关的文件内: for _, status := range statuses { t, _ := time.Parse("Mon Jan 2 15:04:05 -0700 2006", status.Created_At) outputFile.WriteString(fmt.Sprintf( "%d||||%d||||%d||||%s||||%d||||%d||||%d||||%s||||%s||||%s\n", status.Id, uint32(t.Unix()), status.User.Id, status.User.Screen_Name, status.Reposts_Count, status.Comments_Count, status.Attitudes_Count, status.Thumbnail_Pic, status.Original_Pic, status.Text)) } 文件中文件中每行存储了一篇微博,格式如下 <微博id>||||<时间>||||<用户id>||||<用户名>||||<转贴数>||||<评论数>||||<喜欢数>||||<缩略图>||||<原始图>||||<正文>
相关文章推荐
- 对搜索引擎开源项目的代码分析——索引(1)
- 对搜索引擎开源项目的代码分析——索引(2)
- xrdp开源项目的代码分析-1
- 开源APP项目代码分析(3)- 生活记事本
- DIOCP开源项目 API代码的封装和流程分析
- Android 开源项目代码分析思路
- 开源项目kcws代码分析--基于深度学习的分词技术
- 开源APP项目代码分析(1)- OpenEyes、Plaid、GitHot
- 开源APP项目代码分析(4)- 天气类
- 开源项目kcws代码分析--基于深度学习的分词技术
- 开源APP项目代码分析(2)- Owspace和MusicDNA
- 短视频 | 问答开源项目解读之整体代码流程和问题分析
- Python开源爬虫项目代码:抓取淘宝、京东、QQ、知网数据--转
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(十四):ASP.NET2.0实现无刷新客户端回调的Callback机制及例子代码下载
- xrdp开源项目的代码分析
- 开源项目kcws代码分析--基于深度学习的分词技术
- 项目实战 - 使用Fiddler抓取bilibili安卓客户端口数据并分析(http、https)
- [探讨]如何更有效地学习开源项目的代码?(转)
- Android部分开源项目源码分析之--图片滑动的效果
- 深入分析MFC文档视图结构(项目实践)