[关闭]
@twein89 2017-12-21T09:52:54.000000Z 字数 1207 阅读 664

pyspider

爬虫


开发须知


抓取脚本编写参考文档

参考api文档
页面解析器pyquery文档
框架作者博客里有pyspider中文系列教程,可以先看这个


开发

一般流程:
mkdir demo_project
cd demo_project
mkdir demo
vim demo/demo.py(或任意文本编辑器)
开始编码demo.py
以下例子在pyspider 爬虫教程(二):AJAX 和 HTTP的基础上扩展

  1. from pyspider.libs.base_handler import *
  2. from pprint import pprint
  3. class Handler(BaseHandler):
  4. def on_start(self):
  5. url = 'http://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0'
  6. self.crawl(url, callback=self.json_parser)
  7. def json_parser(self, response):
  8. # pprint(response.json)
  9. subjects = response.json['subjects']
  10. for each in subjects:
  11. # pprint(each)
  12. movie_url = each['url']
  13. # example url: https://movie.douban.com/subject/26691320/
  14. self.crawl(movie_url, callback=self.movie_parser)
  15. # 解析出电影名和评分
  16. def movie_parser(self, response):
  17. # pprint(response.text)
  18. # html页面解析参考pyquery文档
  19. movie_item = {
  20. 'movie_name': response.doc('#content > h1 > span').text(),
  21. 'movie_score': response.doc('.ll.rating_num').text()
  22. }
  23. # movie_item 为一个处理好的数据
  24. # return 的数据会在on_result方法里处理
  25. return movie_item
  26. # 一般在on_result方法里进行数据保存操作
  27. def on_result(self, result):
  28. # 过滤为None的result
  29. if not result:
  30. return
  31. movie_item = result
  32. pprint(movie_item)

调试

调试可以直接使用print语句输出信息
推荐在命令行里使用pyspider框架的one命令,比在网页中调试更方便:
cd demo_project
pyspider one demo/demo.py
命令行里会输出print的信息,pprint的输出会更友好美观。


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注