看各种爬虫文献也有好几天了,总是感觉下不了手,总结一句“提笔忘字,总是因为看的太多而写的太少”。所以从现在开始,把看到的想到的,需要总结的东西慢慢的都沉淀下来,扎扎实实的走好每一步。

  先来说这几天遇到的各种坑,好不容易找到了关于pyquery和pyspider的各种资料,准备敲到电脑上试试,结果出现了好几个问题。电脑上安装的是python3,代码是python2,转换好了环境,发现目标网站的格式变得,各种苦恼,各种困惑。或许这也是很多学习写爬虫的人总会遇到的问题。从网上下载了几本书,对照着写,结果发现各种库的调用格式都变了,真的是各种坑,各种坑,坑。。。。。

  先来看pyspider的官方docs中的第一个例子

 from pyspider.libs.base_handler import *

 class Handler(BaseHandler):
crawl_config = {
} @every(minutes=24 * 60)
def on_start(self):
self.crawl('http://scrapy.org/', callback=self.index_page) #很逗比的pyspider的案例居然爬去另一位大神之作scrapy的网站,这一行可以看作是初始化,从callback函数中可以看出调用index_page @config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('a[href^="http"]').items(): # 用pyquery解析获取初始链接中的每一个超级链接,对每一个链接再调用detail_page,需要注意的是如果需要翻页的话,在翻页的链接上再调用index_page
self.crawl(each.attr.href, callback=self.detail_page) @config(priority=2)
def detail_page(self, response): #在detail_page页面中获取 url和title,并返回
return {
"url": response.url,
"title": response.doc('title').text(),
}
  • def on_start(self) 是爬虫的入口,当点击run时显示的第一个页面
  • self.crawl(url, callback=self.index_page)*  是程序最重要的接口。它添加了一个新的爬去任务。需要注意的是self.crawl 中有很多参数可以自己设置。
  • def index_page(self, response)返回一个 Response* 对象. response.doc*pyquery 对象,这个对象就像 jQuery的 API 一样获取元素。
  • def detail_page(self, response)返回字典对象. 这个结果默认由resultdb获取. 可以通过改写 on_result(self, result)方法处理存储方式。

官方docs中爬取 http://www.imdb.com的爬虫也因为IMDB的改版已经不能使用,顺手调试了一下代码

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2015-01-04 03:08:55
# Project: tutorial_imdb from pyspider.libs.base_handler import * class Handler(BaseHandler):
"""
It's a sample scrape script of pyspider tutorial: Level 1: HTML and CSS Selector
http://docs.pyspider.org/en/latest/tutorial/HTML-and-CSS-Selector/
""" @every(minutes=24 * 60)
def on_start(self):
self.crawl('http://www.imdb.com/search/title?count=100&title_type=feature,tv_series,tv_movie&ref_=nv_ch_mm_1', callback=self.index_page) @config(age=24 * 60 * 60)
def index_page(self, response):
for each in response.doc('a[href^="http"]').items():
for each in response.doc('h3.lister-item-header a').items(): 把官方文档中的正则表达式改成了css path,这样看起来容易理解多了
self.crawl(each.attr.href, priority=9, callback=self.detail_page)
self.crawl([x.attr.href for x in response.doc('.next-page').items()], callback=self.index_page) def detail_page(self, response):
return {
"url": response.url,
"title": response.doc('div.title_wrapper h1').text(),
"rating": response.doc('div.ratingValue strong span').text(),
"stars": [x.text() for x in response.doc('div.credit_summary_item span a span.itemprop').items()],
}

进一步分析IMDB网站就会发现,影片详细信息页面下面的很多是不能够用csspath抓取的,需要进一步解析,明天再来(*^_^*)

我们的爬虫从pyspider开始说起(一)的更多相关文章

  1. Python的两个爬虫框架PySpider与Scrapy安装

    Python的两个爬虫框架PySpider与Scrapy安装 win10安装pyspider: 最好以管理员身份运行CMD,不然可能会出现拒绝访问文件夹的情况! pyspider:pip instal ...

  2. Python爬虫之PySpider框架

    概述 pyspider 是一个支持任务监控.项目管理.多种数据库,具有 WebUI 的爬虫框架,它采用 Python 语言编写,分布式架构.详细特性如下: 拥有 Web 脚本编辑界面,任务监控器,项目 ...

  3. [转]Python爬虫框架--pyspider初体验

    标签: python爬虫pyspider 2015-09-05 10:57 9752人阅读 评论(0) 收藏 举报  分类: Python(8)  版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  4. 爬虫之pyspider

    1.简单的介绍 pyspider是由国人binux编写的强大的网络爬虫系统,其GitHub地址为 https://github.com/binux/pyspider 官方文档地址为 http://do ...

  5. 爬虫框架pyspider的使用

    j概要:了解了爬虫的基础知识后,接下来我们来使用框架来写爬虫,用框架会使我们写爬虫更加简单,接下来我们来了解一下,pyspider框架的使用,了解了该框架,妈妈再也不用担心我们的学习了. 前期准备: ...

  6. Python爬虫之一 PySpider 抓取淘宝MM的个人信息和图片

    ySpider 是一个非常方便并且功能强大的爬虫框架,支持多线程爬取.JS动态解析,提供了可操作界面.出错重试.定时爬取等等的功能,使用非常人性化. 本篇通过做一个PySpider 项目,来理解 Py ...

  7. Python爬虫框架--pyspider初体验

    之前接触scrapy本来是想也许scrapy能够让我的爬虫更快,但是也许是我没有掌握scrapy的要领,所以爬虫运行起来并没有我想象的那么快,看这篇文章就是之前使用scrapy的写得爬虫.然后昨天我又 ...

  8. 爬虫之pyspider 安装

    解决方法: 利用wheel安装 S1: pip install wheelS2: 进入www.lfd.uci.edu/~gohlke/pythonlibs/,Ctrl + F查找pycurl S3:这 ...

  9. python爬虫框架Pyspider初次接触

    pyspider网站地址:http://docs.pyspider.org/en/latest/.文档比较好,安装起来也非常方便.既然是基于python的框架,那么首先得安装python.微软出的一款 ...

随机推荐

  1. linux 下导出oracle数据库

    #变更用户su - oracle <<EOF#添加用户名/密码,目标文件地址和文件名 ,保存记录日志地址/文件名  full=y表示数据库全部导出,默认导出连接数据库的用户数据库对象 ex ...

  2. [translation]The rise of college ‘Grade Forgiveness’

    Education 教育 The rise of college 'Grade Forgiveness' /*the rise of -的增加*/大学等级宽恕现象的增加. Universities a ...

  3. 29. Divide Two Integers (JAVA)

    Given two integers dividend and divisor, divide two integers without using multiplication, division ...

  4. Java I/O (1) - 输入/输出流

    先说概念: Java API中,可以从其中读入一个字节序列的对象叫做输入流,可以向其中写入一个字节序列的对象叫做输出流.这些字节序列的来源地 和 目的地 可以文件.网络连接甚至内存块.抽象类Input ...

  5. java_32 SQLyog中创建数据库表

    USE test; /*1.创建账务表 id name mony*/ CREATE TABLE zhangwu(id INT PRIMARY KEY AUTO_INCREMENT, sname VAR ...

  6. ViewPager中Fragment的重复创建、复用问题

    在ViewPager中的Fragment的生命周期  随着页面的切换 当前的展示页相邻的页面生命周期一直在变化 一开始 刚进入Activity时候,ViewPager默认初始化好前两个Fragment ...

  7. 大数据学习(二)-------- MapReduce

    前提已经安装好hadoop的hdfs集群,可以查看 https://www.cnblogs.com/tree1123/p/10683570.html Mapreduce是hadoop的运算框架,可以对 ...

  8. node.js中对 mysql 进行增删改查等操作和async,await处理

    要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...

  9. Linux驱动之平台设备驱动模型简析(驱动分离分层概念的建立)

    Linux设备模型的目的:为内核建立一个统一的设备模型,从而有一个对系统结构的一般性抽象描述.换句话说,Linux设备模型提取了设备操作的共同属性,进行抽象,并将这部分共同的属性在内核中实现,而为需要 ...

  10. 炫酷MD风之dialog各种对话框

    这个demo也是我从别人那里学来的,不是本人写的代码,我也是个MD初学者.把这个demo分享给看到的你,希望对你有帮助. 直接上图: demo地址:百度网盘:链接:https://pan.baidu. ...