通用的论坛正文爬虫
对论坛中的回帖的正文进行爬取,并保存为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的文本
因为是针对某一特定的class进行提取,所以:
- 如果回帖正文中有引用之前楼层的发言,则被引用的部分也会被当作正文
- 如果回帖正文用了多个class(如使用了不同的主题),那么只能得到其中某一class的文本
- 如果某论坛的翻页标签并没有"下一页"或"下页"的字样,将无法自动翻页
- 检测url是否可用:
- 因为不知道如何让Selenium返回状态码,因此目前采取的方法是先用urlib.request获取一次页面并检测url是否可用,如果可用再利用Selenium加载一次
- 其实如果主要访问的是静态网页可以不用Selenium加载,直接利用urlib.requst。之后争取优化这一流程,并将是否加载动态网页做成一个参数传入函数。