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

  先来说这几天遇到的各种坑,好不容易找到了关于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. R语言-图形辅助

    1.画底纹格子    grid()函数 > plot(rnorm(100)) > grid() #画底纹格子 > grid(nx=NA, ny=8, #画水平底纹,横坐标无分隔,纵坐 ...

  2. linux 安装gcc8

    https://blog.csdn.net/longji/article/details/80400339 01 ubuntu1604desktop_x64 安装gcc8.1.0系统环境: gcc版本 ...

  3. zip 格式解析

    1.格式 https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.2.0.txt 官方文档 https://blog.csdn.net/hp9103 ...

  4. 简单的页面互点Javascript代码

    简单的页面互点Javascript代码,可以适用于前端$(function(){ $('.ip_b_con_item li,.pro_index_list li').mouseover(functio ...

  5. 浏览器虚拟过程IP插件

    浏览器虚拟过程 这是个插件在调用API时候结合使用,比如调用大量IP去点击http://www.opew.cn和http://www.gtev.cn function QMPlugin.gbip() ...

  6. 淘宝API对接实例

    以为公司祖传代码太多使用的PHP5.4.45版本,所以无法使用SDK包,只能原生自己写,踩了不少坑. 1.授权 https://oauth.taobao.com/authorize?response_ ...

  7. Integer 函数传参实现值交换

    import java.lang.reflect.Field; public class MainClass { public static void main(String[] args) { In ...

  8. @Autowired注解和静态方法

    @Autowired注解入static属性时,出现NullPointerException异常. 使用构造方法可解决: @Component public class Test { private s ...

  9. hive上传数据到oracle

    # Oracle 建立hive外部表 使用oracle的大数据连接器向建立hive的外部表,在通过在oracle中根据外部表建立内部表(create table as select * from ex ...

  10. DOCKER学习 docker

    DOCKER只能安装到LIUX系列机器上 如果WINDOWS想安装必须通过虚拟机来完成. 比如用VM,VBOX等 安装之前需要用ROOT账户 su 安装DOCKER (CE是个人版本,EE是企业版本) ...