本文就以抓取起点中文小说网的小说作品基础信息作为目标,讲解如何使用pyspider框架采集数据。
关于为何要选择起点作为目标,其一、笔者作为网文爱好者,也想收集起点小说作品信息,找些热门小说看;其二、起点作为比较成熟的小说网站,再反爬虫方面应该有对应策略,刚好练习一下爬虫怎么规避这些策略。
在阅读本文之前,建议先看一下文档及框架作者本人写的中文教程
pyspider 爬虫教程(一):HTML 和 CSS 选择器
pyspider 爬虫教程(二):AJAX 和 HTTP
pyspider 爬虫教程(三):使用 PhantomJS 渲染带 JS 的页面
安装很简单,如果已安装pip,直接执行命令
由于目前很多网站都是动态js生成页面,需要安装 PhantomJS 来获得js执行后的页面,而不是原本静态的html页面,我们再来装一下
待安装完成后,我们先看一下pyspider对应的可执行命令
在这里我们直接执行如下命令启动,更复杂的命令参看 文档
首先看一下启动成功后,浏览器访问127.0.0.1:5000地址的界面如下
点击Create,新建项目
点击生成的项目名,进入脚本编写&调试页面
先看一下对应的爬虫脚本
1.测试抓取时,运行一段时间后出现所有抓取链接均FetchError的报错,抓取失败
失败原因:未设置User-Agent 及 抓取速率太快,导致IP被封禁
解决办法:
1) 设置User-Agent,调整速率从1->0.7
2) 使用代理IP,防止被封禁,这里笔者尝试使用搭建 简易免费代理IP池 ,但是由于免费代理大多不可用,会导致抓取不稳定,还是决定放弃使用
2.笔者本来是打算通过不断抓取下一页的链接,来遍历所有小说作品的,可是由于这部分是JS动态生成的,虽然使用phantomjs,能解决这个问题(具体见作者教程3),但是使用phantomjs会导致抓取效率变低,后来还是选择采用固定首尾页数(PAGE_START,PAGE_END)的方法
3.当使用css选择器有多个数据时,怎么获取自己想要的
比如在小说详细页,有字数,点击数,推荐数三个
其css selector均为 .book-info >p >em,要获取对应的次数只能使用pyquery的.eq(index)的方法去获取对应的文本数据了
4.如果遇到抓取的链接是https,而不是http的,使用self.crawl()方法时,需要加入参数validate_cert =False,同时需要确保pyspider --version 版本再0.3.6.0之上
具体解决方法,可以查看如下链接:
PySpider HTTP 599: SSL certificate problem错误的解决方法
简单数据分析之二
采用 SCWS 中文分词 对所有作品名字进行分词统计,得到出现频率最高的排行
看起来如果写小说,起个『重生之我的神魔异世界』这类标题是不是吊炸天
简单数据分析之三
简单统计一下起点作者的作品数排序
武侠精品应该是起点的官方作者号吧,不然194本作品也太恐怖了
也发现了不少熟悉的大神,比如唐家三少,流浪的蛤蟆,骷髅精灵等,有些作品还是可以看看的
你说的是网站开始怎样设计,包括:程序的设计,注意事项和数据库设计,特别是字段的设计以及整个架构的设计吗?我个人的建议是:下载一个网站的小说类型的ASP.NE系统,看看人家的代码,和数据库设计,去研究研究,就能知道怎样设计了,我也是这样学会的。祝你好运。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)