使用pyspider框架爬取电影网站
在开始之前,我们默认你已经正确的安装了pyspider框架。
我们以爬取电影天堂网站上的动作片为例(https://www.dy2018.com/2/)
启动pyspider框架
在命令行窗口输入: pyspider all
这样可以启动pyspider的所有组件,包括PhantomJS 、ResultWorker 、Processer 、Fetcher 、Scheduler 、WebUI ,这些都是pyspider 运行必备的组件。最后一行输出提示WebUl 运行在5000 端口上。可以打
开浏览器,输入链接http://localhost:5000 ,这时我们会看到页面:
创建项目
点击右边的Create 按钮,在弹出的浮窗里输入项目的名称和爬取的链接,再点击
Create 按钮。
创建项目之后,pyspider会自动的为我们生成爬取定义页面的代码。
爬取首页
点击左侧右上角的run 按钮,即可看到页面下方follows 便会出现一个标注,其中包含数字1,这
代表有新的爬取请求产生。
左侧左上角会出 现当前run的配置文件,这里有一个callback 为on start ,这说明点击run 之后
实际是执行了on_start()方法。在on _ start ()方法中,我们利用crawl ()方法生成一个爬取请求,那
下方follows 部分的数字1就代表了这一个爬取请求。
点击下方的follows 按钮,即可看到生成的爬取请求的链接。点击页面中的链接箭头,我们就可以对此链接进行爬取。
但是,在点击链接箭头后可能会出现错误: Exception: HTTP 599: SSL certificate problem: self signed certificate in certificate chain。
因为我们请求的是https页面,需要进行证书验证。这个报错我们可以通过关闭证书验证解决。给crawl加上validate_cert=False 即可。添加之后我们再点击链接箭头,可以看到默认正常获取了页面所有的的链接。
通过观察,我们发现,我们需要获取的页面链接是类似于https://www.dy2018.com/i/XXXX.html这样的页面,其他的链接我们不需要,因此我们需要调试爬取代码。将index_page方法里面的帅选条件改为’.ulink:nth-child(2)’,改完之后,点击左侧右上角的run,重新获取页面所有链接。
已经成功获取了动作片第一页所有电影页面链接。
爬取所有页面链接
我们可以通过获取下一页的链接,让pyspider自动循环处理,直至获取到所有页面链接。
我们在index_page添加以下代码来实现:
next = response.doc(‘.x p a:nth-last-child(3)’).attr.href
self.crawl(next, callback=self.index_page, validate_cert=False)
重新点击左侧右上角的run,发现follow多了一个下一页的链接。
获取页面详情
从前30个链接中任意选一个链接,点击右箭头,即可爬取电影详情页面。
在web页面我们可以看到页面预览,pyspider默认爬取了标题和url。
我们可以根据自己的需要改写爬取代码。 如:标题、页面url、内容、下载地址、首页图片等等。。。
启动爬虫项目
返回爬虫的主页面,将爬虫的status 设置成DEBUG 或RUNNING ,点击右侧的Run按钮即可开
始爬取,
点击主页面上项目Active Tasks,即可查看爬虫执行情况。
点击主页面上项目Result ,即可查看爬取结果。在result页面的右上角可以导出json和csv格式。
ps:pyspider默认配置数据库为sqlite,爬取结果一般保存在C:\Users\Administrator\data目录下 的result.db中。