pyspider 使用过程中遇到的一些坑
2016-05-22 11:39
211 查看
1. 前言
最近在玩爬虫, 使用最基本的urllib库来爬取静态网页的方法, 我们基本已经掌握了, 于是觉得应该整个框架玩玩, 于是看到了pyspider, 这是一个国内的大神写的一个框架, 非常好用, 不过毕竟新手, 使用的时候, 还是遇到不少问题, 这里做一个整理2. 练手项目
我们这里选用的练手项目是 爬取 豆瓣电影上的电影信息, 作者给出教程我也转载了过来 http://blog.csdn.net/zhyh1435589631/article/details/514742033. 遇到的各种问题
pip 安装我们尝试了各种安装的手段, 使用 get_pip.py, 或者 easy_install 都不行, 后来经过实验室同学提醒发现, 原来是我们实验室设置的网络出口有问题, 给跪了。。。。(改成教育网出口, 就好了)
pyspider : failed to create process
我们原先安装的python版本是2.7.5, 安装pyspider 的过程中也没有任何报错, 于是很苦恼, 重新下载了一个 python 新版本的 2.7.11 问题解决, 于是以为是版本问题, 可是今天在 centos 7 上面, 也是 python 2.7.5 却又是可以使用的了, 感觉有些灵异。。。。。
pyspider: connect to scheduler rpc error: error(10061, ”)
这个问题, 尝试了很久都没有解决, 最终的处理方式是, 换操作系统, ie, 在windows 上面实现不了, 同样的框架代码到linux 上可以完美运行, 基本可以认定, 当前版本的pyspider 对windows 支持不是很好。
HTTPError: HTTP 599: SSL certificate problem: self signed certificate in certi…
这个问题, 我们采用的是忽略证书, 为crawl 方法添加参数 validate_cert = False, 即可
css 选择器
pyspider 可以匹配相应的字符串, 支持css 选择器功能, 但是需要注意的是 在chrome 中 对tbody 的渲染支持不好, 因而css 选择器参数中 请不要使用 tbody 标签进行筛选
关于css 选择器的资料可以看看这个链接中的内容 http://www.w3schools.com/cssref/css_selectors.asp
4. 运行效果(centos 7)
5. 最终实现代码
需要注意crawl 方法用来抓取页面, callback 为抓取页面后的回调函数#!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2016-05-21 20:21:32 # Project: tutorial_douban_moive from pyspider.libs.base_handler import * import re class Handler(BaseHandler): crawl_config = { } @every(minutes=24 * 60) def on_start(self): url = "http://movie.douban.com/tag/" self.crawl(url, callback=self.index_page, validate_cert = False) @config(age=10 * 24 * 60 * 60) def index_page(self, response): for each in response.doc('a[href^="http"]').items(): if re.match("https://movie.douban.com/tag/\w+", each.attr.href, re.U): self.crawl(each.attr.href, callback=self.list_page, validate_cert = False) def list_page(self, response): for each in response.doc('#content > div > div.article > div > table tr > td > div > a').items(): #print each self.crawl(each.attr.href, callback=self.detail_page, validate_cert = False) @config(priority=2) def detail_page(self, response): return { "url": response.url, "title": response.doc('#content > h1 > span').text(), "rating": response.doc('#interest_sectl > div.rating_wrap.clearbox > div.rating_self.clearfix > strong').text(), "director": [x.text() for x in response.doc('#info > span:nth-child(1) > span.attrs > a').items()], }
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- Scrapy的架构介绍
- 爬虫笔记
- 基于C#实现网页爬虫
- Nodejs爬虫进阶教程之异步并发控制
- PHP+HTML+JavaScript+Css实现简单爬虫开发
- 如何优雅地使用c语言编写爬虫
- PHP实现简单爬虫的方法
- NodeJS制作爬虫全过程(续)
- php实现简单爬虫的开发
- node.js基础模块http、网页分析工具cherrio实现爬虫
- PHP爬虫之百万级别知乎用户数据爬取与分析
- 一个PHP实现的轻量级简单爬虫
- nodejs爬虫抓取数据乱码问题总结
- 基于Node.js的强大爬虫 能直接发布抓取的文章哦
- nodeJs爬虫获取数据简单实现代码
- nodejs爬虫抓取数据之编码问题
- Node.js编写爬虫的基本思路及抓取百度图片的实例分享
- python实现爬虫统计学校BBS男女比例(一)
- 使用Python编写基于DHT协议的BT资源爬虫