Skip to content

chenyjade/bbs_spider

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bbs_spider

通用的论坛正文爬虫
对论坛中的回帖的正文进行爬取,并保存为CSV文件
感谢三位队友:温雨晴 吕思韵 莫昊宇

如何使用

  • 将url放在url_list.txt中,每个链接一行(已存在一部分示例url)
  • 如果提取效果不好,提取出大量论坛自带提示等,可以尝试用停用词将他们过滤(停用词只匹配字符串的开头和结尾)
  • 将停用词放在stop_words.txt(已存在一部分停用词)
  • 输出结果在/data中,每一个csv对应一个url(帖子的第一页)
  • csv的第一行为发帖时间,如果正则表达式没有找到时间,第一行将是"No Time Found"
  • 为了支持动态网页加载所以需要用到浏览器,默认使用PhantomJS,可以在代码中进行修改
  • 因为加载动态网页需要时间,如果觉得加载速度太慢且需要爬取的网页大多为静态,可以在代码中进行修改

算法核心思想

  • 对DOM树进行一系列过滤
  • 提取出树中最深层的带文本的节点
  • 以每个tag的class为key,文本为value构建字典
  • 分析每个class对应的文本,找到最有可能是正文所对应的那个class
  • 提取对应class的文本

已知BUG

因为是针对某一特定的class进行提取,所以:

  • 如果回帖正文中有引用之前楼层的发言,则被引用的部分也会被当作正文
  • 如果回帖正文用了多个class(如使用了不同的主题),那么只能得到其中某一class的文本
  • 如果某论坛的翻页标签并没有"下一页"或"下页"的字样,将无法自动翻页

TODO

  1. 检测url是否可用:
  • 因为不知道如何让Selenium返回状态码,因此目前采取的方法是先用urlib.request获取一次页面并检测url是否可用,如果可用再利用Selenium加载一次
  • 其实如果主要访问的是静态网页可以不用Selenium加载,直接利用urlib.requst。之后争取优化这一流程,并将是否加载动态网页做成一个参数传入函数。

About

通用的论坛正文爬虫

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages