@twein89
2017-12-21T09:52:54.000000Z
字数 1207
阅读 779
爬虫
参考api文档
页面解析器pyquery文档
框架作者博客里有pyspider中文系列教程,可以先看这个
一般流程:
mkdir demo_project
cd demo_project
mkdir demo
vim demo/demo.py(或任意文本编辑器)
开始编码demo.py
以下例子在pyspider 爬虫教程(二):AJAX 和 HTTP的基础上扩展
from pyspider.libs.base_handler import *
from pprint import pprint
class Handler(BaseHandler):
def on_start(self):
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'
self.crawl(url, callback=self.json_parser)
def json_parser(self, response):
# pprint(response.json)
subjects = response.json['subjects']
for each in subjects:
# pprint(each)
movie_url = each['url']
# example url: https://movie.douban.com/subject/26691320/
self.crawl(movie_url, callback=self.movie_parser)
# 解析出电影名和评分
def movie_parser(self, response):
# pprint(response.text)
# html页面解析参考pyquery文档
movie_item = {
'movie_name': response.doc('#content > h1 > span').text(),
'movie_score': response.doc('.ll.rating_num').text()
}
# movie_item 为一个处理好的数据
# return 的数据会在on_result方法里处理
return movie_item
# 一般在on_result方法里进行数据保存操作
def on_result(self, result):
# 过滤为None的result
if not result:
return
movie_item = result
pprint(movie_item)
调试可以直接使用print语句输出信息
推荐在命令行里使用pyspider框架的one命令,比在网页中调试更方便:
cd demo_project
pyspider one demo/demo.py
命令行里会输出print的信息,pprint的输出会更友好美观。