1 实验目的和要求
爬取Curlie.org网站Recreation分类下所有的网站信息(包括标题、链接和网站介绍)
以j son形式导出爬取的数据
2 实验环境
使用Python Scrapy框架爬取
本次实验使用的Python版本为3.6.2,分别用本地电脑和云服务器进行了数据采集
3 实验过程
3.1 初次爬取部分成功
3.1.1 最底层路径下全部网站信息爬取成功
爬取最底层目录Antiques下网站信息在将对具体网站信息(标题、链接和描述)进行循环爬取之前我们先检验了此段代码能否正常运行抓取到我们想要的信息。
结果信息成功爬取到该目录下全部网站信息并且完整,但在description中出现了\r\n\t\t\r\n此类字符,后期使用.replace(' ','')去除。
3.1.2 使用循环爬取所有小分类下网站部分成功
循环爬取所有分类下网站URL为了不让电脑爬取响应时间太久影响效率,我们先注释掉了爬取每个分类下具体网站信息的代码部分,在循环爬取各分类的代码中加入了打印该分类URL的代码检验是否能按照要求爬取Recreation类目下所有小分类。
结果成功访问了该大分类下的小分类类目,但当我们试图再次执行操作的时候,我们遇到了问题,在3.2部分中进行说明。
3.2 第二次爬取无法获取页面
无法获取页面在此执行爬虫的时候我们发现爬虫抓回数据为0,在修改了代码之后仍然无法解决。
随后我们在网络上查找原因发现是由于爬虫频繁的抓取操作导致IP被暂时封了因此无法抓取数据,随后我们积极寻找解决措施。
3.3 解决IP被封的问题
在setting文件中加入控制爬取速度的代码随后我们在setting文件中加入了控制爬取速度和设置代理的代码防止被网站禁掉IP。
设置代理IP可以看到,使用了代理IP之后再次运行爬虫又能继续进行了。
3.4 进行再一次爬取
3.5 添加split语句
函数:split()Python中有split()和os.path.split()两个函数,具体作用如下:
split():拆分字符串。
通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
输出当前爬取的网页的目录。
输出当前爬取网页的目录 带有catalog的输出结果在运行了两小时之后,当前爬取到的数据量为2.73MB。预期还将爬取较长时间。
2小时数据量4 经验总结
本次爬取的是curlie.org网站。与之前所爬取的网站不同的是,curlie.org是一个分类网站,目录是分级的;之前爬取的网站所列出的信息是分页显示的,因此本次爬取就要学习新的爬取方法。在爬取过程中出现了一个巨大的很严重的问题,由于curlie.org设置了反爬机制,在运行了一次之后云服务器的IP就被封了。在手足无措之后在网上查了解决方法,随即设置了代理IP。就本次实验的完成情况来看,选择深度优先还是广度优先不是我们首要考虑的问题,能够完整地爬取才是最重要的。还是要继续努力学习python和scrapy框架,继续理解信息检索的内涵。
5 附录:Recreation类目下分类架构
网友评论