一、前文
之前被叫去做网络爬虫,爬取新浪新闻的url,标题,内容和评论,不过在需求上有点改变,主要是评论的间隔被要求有‘\t’的分割,比如将
|
|
改为
试过重新爬取,不过新浪在2015年后,做了些改变,一是评论api下的内容有了些修改,从原本的中文字符变为了’\u’,解决办法可以参考另一篇博文
三张图告诉你python爬虫时转换\u中文字符的“坑”,二是在爬虫上需要做好浏览器模拟的工作,不然很容易被封杀,而且,在做大规模爬取的时候,需要利用多线程或者分布式的手段进行,多线程稍不注意,到了系统线程的上限,这是要注意的。
二、抽取和解析
因为我想爬取这个页面(social)一年的内容,已经超过2万了(只算那些有评论的新闻),所以经常第二天回来发现中途error。分布式计算的东西现在还没去学习,所以还是复习一下python。
在这个简短的程序中,用到了SGMLParser类进行解析,这个类封装了可以实现对具有标签的字符串的处理函数,当然没有标签也是可以用的,不需要冠以html文本种类的要求,网上很多例子可能会拿HTMLParser与SGMLParser进行说明,通过解析X.html进行说明。这里我只采用单线程的方法。
SGMLParser:
1、通过利用开关变量的方法进行标签间内容的抽取和解析,在此之前,需要进行变量的初始化,可以利用init()或者reset(),一般用reset()。
2、start_x(),end_x(),handle_data(),这三个函数,第一个是当读取到
这篇博文
变量说明:
rootdir:原始文件目录
rootdir2:需要存放转换好的文件目录
方法说明:
1、通过SGMLParser读取
; ;中的内容,调用solve()函数,利用正则匹配的方法将原来不符合规范的空格替换为’\t’,返回需要替换的内容到comment变量
2、利用正则匹配找到定位到; ;,替换为Parse类对象的comment值
(正则表达式的方法参考以下注释)
完整代码:
|
|
结果:
注意:win7系统一般文件夹下的文件总数(包括文件夹)不能超过21845个,不然会提示错误。